首页 > 编程知识 正文

基于matlab的低通滤波器的设计,lsb信息隐藏原理

时间:2023-05-04 12:29:26 阅读:134558 作者:3642

用python试着制作了音频的LSB隐藏算法,但过程是曲折的。 虽然结果还存在一些瑕疵,但毕竟还不太习惯音频信号处理,但结果总算成功了。

1 .环境

windows10操作系统、pycharm编辑器、python3.9、第三方库: librosa、bitarray

1.1bitarray的安装

选择安装bitarray是为了解决英语字符串和二进制字符串的转换问题

pip安装二进制

1.2安装librosa

这是一个Python模块,通常用于分析音频信号,但倾向于音乐。 这包括用于构建音乐信息搜索(MIR )系统的nuts和bolts。

pip安装库

2 .转码函数defstr2bitarray(s ) :s.replace(r'n ',' ) ret=bitarray('.join ) [蓝色兔子] int ('1' hard )

bitarray2str ) )函数:起到将解密后的二进制字符串转码成明文的作用

3 .原理

以上是图像的lsb隐藏算法,音频也很相似

一句话,如果音频采样点是32位浮点类型,则替换其中不太重要的位置对音频影响很小,并且极难发现。 例如,从0.005689变更为0.005680。

4 .算法是importlibrosafrombitarrayimportbitarrayimportsoundfileassfimportnumpyasnpbit _ float={ ' 00 ' 3360.00001,' 01 ' 11 ' :000004 } float _ bit={ 8: ' 00 ',9:'00 ',10:'00 ', 11:'00' 83:'10 '、29:'10 '、30:'10 '、31:'10 '、383360'11 '、393360'11 '、403: ' 10 ' 40:'413360 ' ' ) ret=Bitarray(''.Join ) [蓝兔子(int ) (1'hex ) [2:] 16 ) [ 3: ] forc ins.encode () defbit2float(bit ) : if bit.to01 (in bit _ float.keys ) : return bit _ float [ bit.to01 ] (deffloat2bit ) ) )。 for key,valueinbit _ float.items (: iffloat==value : returnkeydeflsb (audio file,hidefile ) :数据, Sr=Librosa.load(audiofile ) #隐藏文本infor=''withopen ) hidefile, ' rb ' ) ASF : infor=str2bitarray (f.read ).decode (utf-8 ) ) start=0end=2foriinrange (len (infor ) ) ) )=bit2float(infor[start:end] ) start=2end=2# librosa.output.write _ example.wav ',data (SF.write ) samplerate=sr,sumplerate hidedfile(:data,Sr=Librosa.load ) Audiofile ) hidedata, Sr1=Librosa.load(hidedfile ) infor='forIinrange ) len ) data ) ) : item=int (hidedata ) (I ) ) ) if item 53360 breakin for=bitarray2str (infor ) withopen(r () (2.txt ),' w ' ) ASf:f.write(infor ) LSB (r ' c 3330 )

LSB )“音频载体_WAV格式”、“密文() :加密函数

UNLSB (“加密前音频”、“加密后的音频”) :解密函数

4.1由于缺陷python没有指针,没有对浮点型采样点进行某些位操作的好方法。 这里采用投机的方法,定义了词典bit_float={'00': 0.000001,' 01': 0.000002,' 10 '

将每两位二进制转换后的float型加到原采样点上,将原采样点与加密采样点的差值作为提取时的判断标准。 这样的缺点很明显,为了在第一解码时导出明文,需要与原始载波进行比较,第二,因为进行了float型加法,所以作为近似值得到,不稳定。 第三,如果不是对部分比特的操作,信息利用率不高,嵌入容量低。

为了解决float型加减时近似计算的弊端,从隐性信息采样点中减去原始采样点时*10000000

int () hidedata [ I ]-data [ I ] * 100000000 )转换为整数,取8、9、10、11约为10,取18、19、20、21为20、28、29、30、21 为转换编写词典

float _ bit={ 8:00、9:00、10:00、11336000、18336001、19336001、20336013:00。

4.2加密与加密前后的波形图无明显区别

测试中的英语都是可能的。

librosa_test.py-系统安全文档类资源-CSDN下载

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。