利用MATLAB实现WAV音频的LSB信息隐藏

利⽤MATLAB实现WAV⾳频的LSB信息隐藏
0. 背景
⾳频信息隐藏技术就是将秘密数据直接嵌⼊⾳频载体中,但不影响原载体的使⽤价值,也不容易被⼈的知觉系统觉察或注意到。
⾳频信息隐藏技术作为信息隐藏技术的⼀个重要分⽀,受到越来越多的关注。
近年来,虽然数字⾳频信息隐藏技术的研究⼯作发展很快,出现了⼀些代表算法,但是与图像信息隐藏算法相⽐,数字⾳频信息隐藏技术⾯临着更⼤的挑战,因为⼈类听觉系统对随机噪声⼗分敏感,使得可以嵌⼊的数据量⾮常有限。
为了能够简明扼要地对⾳频信息隐藏技术进⾏说明,本⽂对WAV⾳频的LSB这种时域信息隐藏算法进⾏了研究。
1. LSB算法原理简介
LSB全称为:Least Significant Bit,即最不重要位。LSB⽅法是⼀种最简单的数据嵌⼊⽅法。任何秘密数据都可以看做是⼀串⼆进制位流,⽽⾳频⽂件的每⼀个采样数据也是⽤⼆进制数来表⽰的。这样,可以
将每⼀个采样值的最不重要位(⼤多数情况下为最低位),⽤代表秘密数据的⼆进制位替换,以达到在⾳频信号中编码进秘密数据的⽬的。
下图即为利⽤LSB算法进⾏信息隐藏的过程。
提取隐藏的信息时的过程图如下图所⽰。
由图可知,如果有⼈截获了含有隐藏信息的⾳频采样数据,并且此⼈知道这段⾳频⾥藏有信息,且他知道被替换位为最低位,那么这个⼈就破解了这个秘密数据了。
因此对于LSB算法来说,密钥就是秘密数据的替换位的位置信息,如果想加⼤对秘密数据攻击的难度,可以⽤⼀段伪随机序列来控制嵌⼊秘密⼆进制位的位置。那么这段伪随机序列就可以作为密钥了。
2. 信息隐藏代码实现(随机序列)
下⾯,为了简化代码,易于读者理解,秘密数据采取的是⼀串随机⽣成的序列,并且采⽤的是⼆进制的最低位替换⽅法。
clc;
clear;
fid =fopen('music_new.wav','r');
oa =fread(fid, inf,'uint8');
fclose(fid);
n =length(oa)-44;
d =randsrc(1, n,[10]);
M = oa;
for i =45:45+ n -1
M(i)=bitset(M(i),1,d(i -44));锻造操作机
end
fid =fopen('music_new_secret.wav','wb');
fwrite(fid, M,'uint8');
fclose(fid);
移通智能手机
figure;
[y1,Fs]=audioread('music_new.wav');
x1 =(0:length(y1)-1)/Fs;
subplot(2,1,1);
plot(x1, y1);
axis([0max(x1)-11]);
xlabel('Time / (s)');ylabel('Amplitude');title('original audio');
[y2,Fs]=audioread('music_new_secret.wav');
x2 =(0:length(y2)-1)/Fs;
subplot(2,1,2);
plot(x2, y2);
axis([0max(x2)-11]);
水溶性酚醛树脂
xlabel('Time / (s)');ylabel('Amplitude');title('information hiding audio');
figure;
subplot(2,1,1);plot(x1, y1);axis([00.6-0.050.05]);
破碎机刀具
xlabel('Time / (s)');ylabel('Amplitude');title('original audio');
subplot(2,1,2);plot(x2, y2);axis([00.6-0.050.05]);
xlabel('Time / (s)');ylabel('Amplitude');title('information hiding audio');
这⾥解释⼀下第7⾏代码,为什么要减去44,同时也是解释了第10⾏代码,为什么要从45开始。
因为我们是在wav格式的⾳频⽂件中进⾏信息隐藏,⽽wav格式的⾳频⽂件中,从⽂件头到数据前⾯⼀共有44字节的⽂件格式说明,因此在进⾏信息隐藏时,要跳过这44位。
橡塑发泡保温材料再解释⼀下第8⾏代码。第8⾏代码采⽤了MATLAB的⽣成指定范围的随机数函数,⽣成的随机数是1⾏n列的⾏向量,这个⾏向量的内容只有0和1。即,随机⽣成的这个向量d就是⽤来模拟⼀段秘密数据。
第7⾏到第12⾏代码就是LSB算法的实现。⾸先第7⾏定义秘密数据的长度(这⾥取了能加密的最长的长度)。第8⾏⽣成了秘密数据d。
第9⾏将原始⾳频的采样数据oa赋值给M,利⽤M存储含有隐藏信息的⾳频采样数据。第10⾏到第12⾏的代码,利⽤bitset函数,将M 从第45个元素开始的每⼀位的最低位⽤秘密数据d的对应位替换掉,完成秘密数据的隐藏。
在给出程序运⾏图之前,需要说明的是,这个⾳频是⼀⾸歌曲的前奏,并且,我们给的秘密信息的长度遍布了整个时域。对于这个时长为29秒的⾳频,它最多能够存储的秘密信息长度是2557800bit,换算后为319725Byte,约等于312KB。
下图是程序运⾏后输出的图⽚,第⼀张图是原始⾳频时域波形图,第⼆张图是含有隐藏信息的⾳频时域波形图。
从上⾯的对⽐图中难以看出差异,我们将其放⼤,将横轴的显⽰范围更改为0-0.6秒。这样便能够明显地看出差异。
3. 提取隐藏信息代码实现(随机序列)
fid =fopen('music_new_secret.wav','r');
oa =fread(fid, inf,'uint8');
m = oa;
n =length(oa)-44;
for i =1: n
w(i)=bitget(m(44+ i),1);
end
fclose(fid);
rate =length(find(w ~= d))/length(d);
提取隐藏信息的实现部分是在程序的第4⾄第8⾏。第4⾏代码将含有隐藏信息的⾳频采样数据赋值给m。第5⾏代码定义了待提取的秘密数据的长度(这个长度要和秘密数据d的长度保持⼀致,如果不⼀致,最终将会得到有缺失的秘密数据或者是多余的乱码,⾄少这个长度不能⼤于⾳频采样数据的长度-44)。第6⾏⾄第8⾏利⽤bitget函数,将m从第45个元素开始的每⼀位的最低位提取出来,存储到w 中,最终,w就是秘密数据。
第11⾏代码计算了⼀下误码率,因为本程序在提取秘密数据前没有对含有隐藏信息的⾳频做任何处理,因此这⾥得到的误码率rate为0。
4. ⼆值图像作为秘密数据
从第2节和第3节中,应该已经知道了信息隐藏以及信息提取的原理了。
接下来,我们把⼀副⼆值图像当做秘密数据来进⾏隐藏。
4.1 图像信息隐藏的代码实现
两根一起塞进来⾸先给出待隐藏的图⽚,如下图所⽰。
下⾯为图像信息隐藏的代码。

本文发布于:2024-09-22 06:48:38,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/212767.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信息   秘密   隐藏   数据   代码   长度   范围
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议