您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 电子商务 > DES加密解密matlab实现
%%注意这是一个function.m文件,直接复制即可function[out,bin,hex]=DES(Text,key,flag)%keyandText是字符类型%key='1011101010100011110100011111001110110100111100111101000110100111'%Text='1011101010100011110100011111001110110100111100111101000110100111'%DES(Text,key)%whenflag=0(默认),DES加密%whenflag=1,DES解密%%===initialdata===%%===import左移位数表===LS=[1122222212222221];%%===importPC-1table===PC1=[57494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124];%%===importPC-2table===PC2=[1417112415328156211023191242681672720132415231374755304051453348444939563453464250362932];%%===importIPtable===IP=[58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157];%%===importE-table===E=[3212345456789891011121312131415161716171819202120212223242524252627282928293031321];%%===importPtable===P=[1672021291228171152326518311028241432273919133062211425];%%===importIPtable===IP_1=[40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725];%%===importS-Box===S1=[1441312151183106125907015741421311061211953841148136211151297310501512824917511314100613];S2=[1518146113497213120510313471528141201106911501471110413158126932151381013154211671205149];S3=[1009146315511312711428137093461028514121115113649815301112125101471101306987415143115212];S4=[7131430691012851112415138115615034721211014910690121171315131452843150610113894511127214];S5=[2124171011685315130149141121247131501510398642111101378159125630141181271142136150910453];S6=[1211015926801334147511101542712956113140113891415528123704101131164321295151011141760813];S7=[4112141508133129751061130117491101435122158614111312371410156805926111381410795015142312];S8=[1328461511110931450127115138103741256110149271141912142061013153582114741081315129035611];%%===输出参数判断===if(2==nargin)flag=0;end%%===producingthesubciphercode(48bit)===%==PC-1==k=zeros(1,56);%56bitn=length(PC1);%n=56fori=1:nk(i)=str2num(key(PC1(i)));%ÐèÒª°Ñcharת»»Îªnumberend%==子密钥生成==sub_k=zeros(16,48);%保存子密钥%评分密钥L=k(1:28);R=k(29:56);fori=1:16n=LS(i);%左移位数%==左移==forj=1:nL=[L(2:end),L(1)];R=[R(2:end),R(1)];end%==PC-2==k=[L,R];sub_k(i,:)=k(PC2);end%%===判断加密还是解密===if(1==flag)sub_k=sub_k(end:-1:1,:);end%%===DES===%==初始IP置换==T=zeros(1,64);%n=length(IP);%n=64fori=1:nT(i)=str2num(Text(IP(i)));endText=T;L=zeros(1,32);R=zeros(1,32);fori=1:32L(i)=Text(i);R(i)=Text(i+32);endfori=1:16tmp=zeros(1,48);%==E-扩展==tmp=R(E);tmp=bitxor(tmp,sub_k(i,:));%RK异或运算48bit%==S-盒==T=zeros(1,32);forj=1:8switchjcase1S=S1;case2S=S2;case3S=S3;case4S=S4;case5S=S5;case6S=S6;case7S=S7;case8S=S8;otherwisedisp('´íÎ󣺳¬³ö³ÌÐòËù½ÓÊܵķ¶Î§£¡');return;endii=tmp((j-1)*6+1)*2+tmp((j-1)*6+6);%h1*2+h6jj=tmp((j-1)*6+2)*8+tmp((j-1)*6+3)*4+tmp((j-1)*6+4)*2+tmp((j-1)*6+5);%h2*8+h3*4+h4*2+h5num=S(ii*16+jj+1);%S-盒tmp1=[0000];num=dec2bin(num);%dec2bin()输出char类型ii=length(num);forjj=1:ii%!improtant£¬chartonum类型转换tmp1(4-ii+jj)=str2num(num(jj));endT((j-1)*4+1:j*4)=tmp1;end%==P置换==T=T(P);%32bitT=bitxor(L,T);%LF(R,K)异或运算%==swapLR==L=R;R=T;end%==IP逆置换==k=[R,L];%交换LRk=k(IP_1);%IP逆置换%%===outputdata===%==binary==Text_o='';n=length(k);fori=1:nText_o=[Text_o,num2str(k(i))];end%===输出参数判断===if(1==nargout)bin=Text_o;elseif(2==nargout)bin=Text_o;hex=bin2hex(bin);elseif(3==nargout)bin=Text_o;hex=bin2hex(bin);out=hex2text(hex);elsekendend
本文标题:DES加密解密matlab实现
链接地址:https://www.777doc.com/doc-5206015 .html