DES加密matlab实现_精品文档Word文档下载推荐.docx
《DES加密matlab实现_精品文档Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DES加密matlab实现_精品文档Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
Text=cha2bit(Text_in);
%%===producingthesubciphercode(48bit)===
%==PC-1==
k=PC1(key);
%functionPC1()在后面定义,做PC1置换,生成56位的有效密钥
%==循环生成子密钥==
sub_k=zeros(16,48);
%保存所有的子密钥
%把有效密钥均分为两份
L=k(1:
28);
R=k(29:
56);
fori=1:
16
n=LS(i);
%获得每次循环的左循环移位的次数
%左循环移位
L=l_bitmov(L,LS(i));
%functionbitmov()在后面定义,左循环移位
R=l_bitmov(R,LS(i));
%PC-2置换
k=[L,R];
sub_k(i,:
)=PC2(k);
end
%sub_k%==testcode==
%%===DES===
%==初始IP置换==
Text=IP(Text);
%functionIP()在后面定义,IP置换
%==feistel==
L=zeros(1,32);
R=zeros(1,32);
32%明文均分成两份
L(i)=Text(i);
R(i)=Text(i+32);
tmp=E(R);
%funcitonE()在后面定义,E-扩展,得48bitR
tmp=bitxor(tmp,sub_k(i,:
));
%functionbitxor()是matlab内建函数,异或运算,RK的异或运算,得48bit
tmp=S(tmp);
%funcitonS()在后面定义,S-盒,得32bit
tmp=P(tmp);
%funcitonp()在后面定义,P置换,得32bit
tmp=bitxor(L,tmp);
%LF(R,K)的异或运算,得32bit
L=R;
R=tmp;
%==IP逆置换==
k=[R,L];
%交换LR
Text_out=IP_1(k);
%functionIP_1()在后面定义,IP逆置换
%%===output===
%==binary==
Text_o='
;
n=length(Text_out);
fori=1:
n%转化为字符输出
Text_o=[Text_o,num2str(Text_out(i))];
end
Text_o
bin2hex(Text_o)%functionbin2hex()在后面定义,把二进制转为十六进制
%cha2bit():
是functionm文件
function[bin,out16]=cha2bit(str)
%function:
汉字转换为二进制和十六进制
%str:
thecharacter
%binorhex:
thecodeofGB2312
str=unicode2native(str,'
GB2312'
%编码转换,把unicode转为GB2312
str=dec2hex(str);
%functiondec2hex(),matlab内建函数,十进制转为十六进制
bin='
len=length(str);
fori=1:
len%对十六进制重排列,方便运算,保存到bin
bin=[bin,str(i),str(len+i)];
tmp=bin;
%16进制
if(1==nargout)
bin=hex2bin(bin);
%functionhex2bin()在后面定义,16进制转换为2进制
elseif(2==nargout)
out16=tmp;
else
hex2bin(bin)
end
%hex2bin():
是functionm文件
function[S]=hex2bin(str)
%十六进制转为二进制
%strisachar
%Sisachar
%%===
S='
len
switchstr(i)
case'
0'
S=[S,'
0000'
];
1'
0001'
2'
0010'
3'
0011'
4'
0100'
5'
0101'
6'
0110'
7'
0111'
8'
1000'
9'
1001'
case{'
A'
'
a'
}
1010'
B'
b'
1011'
C'
c'
1100'
D'
1101'
E'
e'
1110'
F'
f'
1111'
otherwise
disp('
错误:
hex2bin输入错误!
return;
end
%bin2hex():
function[hex]=bin2hex(str)
%2进制to16进制
if(mod(length(str),4)~=0)
disp('
输入错误!
);
hex='
len=length(str)/4;
switchstr((i-1)*4+1:
i*4)
case'
hex=[hex,'