[file,Fs]=audioread('1.m4a');
file(:,2)=[]; %%雙聲道分列處理
fs = 8000;
x0 = resample(file,fs,Fs);
x2=dec_to_bin(x1);%將語音信號由10進制轉化為2進制
%利用Logistic混沌映射,對語音信號進行加密
k1=0.3;u1=3.7;k2=0.6;u2=3.9;%設定初始值,即密鑰
z1=k1;z2=k2;
for m=1:80 %迭代80次,達到充分混沌狀態
z1=u1*z1*(1-z1);
end
for n=1:90 %迭代90次,達到充分混沌狀態
z2=u2*z2*(1-z2);
end
a(1)=z1;
b(1)=z2;
%產生一維混沌加密序列
for i=1:length(x0)-1
a(i+1)=u1*a(i)*(1-a(i));
b(i+1)=u2*b(i)*(1-b(i));
end
A=zeros(length(x0),1);
for j=1:length(x0)
if(a(j)>b(j))
k=1;
else
k=0;
end
A(j)=k;
end
B=dec_to_bin(A);
x3=bitxor(bin2dec(x2),bin2dec(B));%異或操作加密,得到密文
x4=dec_to_bin(x3);
%%%%%%%%%%%%%%%%%解密%%%%%%%%%%%%%%%%%%
%輸入密碼,與密文做異或解出明文
k11=0.3;u11=3.7;k22=0.6;u22=3.9;
for m=1:80 %迭代80次,達到充分混沌狀態
k11=u11*k11*(1-k11);
end
for n=1:90 %迭代90次,達到充分混沌狀態
k22=u22*k22*(1-k22);
end
aa(1)=k11;
bb(1)=k22;
%產生一維混沌加密序列
for i=1:length(x0)-1
aa(i+1)=u11*aa(i)*(1-aa(i));
bb(i+1)=u22*bb(i)*(1-bb(i));
end
AA=zeros(length(x0),1);
for j=1:length(x0)
if(aa(j)>bb(j))
k=1;
else
k=0;
end
AA(j)=k;
end
BB=dec_to_bin(AA);
x5=bitxor(x3,bin2dec(BB));
x6=bin_to_dec(dec2bin(x5))/1000;
sound(x6)
有兩個函式:
function wavB=bin_to_dec(wavA)
wavB=bin2num(quantizer([8 0]),wavA);
end
function wavB=dec_to_bin(wavA)
wavB=num2bin(quantizer([8 0]),wavA);
end
我想知道為什么當k11 u11這些引數改變之后仍然可以完成解密??正常k1不等于k11的話是不能產生相同的序列的,也就無法解密,但改變引數k11后x5、x6這些值都會發生變化,卻還是能播放出解密后的信號!!為什么呀??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/62211.html
標籤:其他
上一篇:matlab程式設計
下一篇:兄弟們能幫忙看看我這該怎么改
