DES算法流程图(图片来源:www.baidu.com)
%DES算法Matlab代码
function C=DES(D,K,M)
% 输入16进制数表示的字符串格式明文D和密钥K,M=1表示加密
%% ----------------------------------数据初始化-----------------------------------
%将以字符串形式输入的明文和密钥转换成01数字串
DB=[];
for i=1:16
Di=D(i);
DBi=['0000',dec2bin(hex2dec(Di))];
DBi=DBi(end-3:end);
DBi=[str2num(DBi(1)),str2num(DBi(2)),str2num(DBi(3)),str2num(DBi(4))];
DB=[DB,DBi];
end
D=DB;
KB=[];
for i=1:16
Ki=K(i);
KBi=['0000',dec2bin(hex2dec(Ki))];
KBi=KBi(end-3:end);
KBi=[str2num(KBi(1)),str2num(KBi(2)),str2num(KBi(3)),str2num(KBi(4))];
KB=[KB,KBi];
end
K=KB;
%64位数据IP置换表
IP=[58 50 42 34 26 18 10 2;
60 52 44 36 28 20 12 4;
62 54 46 38 30 22 14 6;
64 56 48 40 32 24 16 8;
57 49 41 33 25 17 9 1;
59 51 43 35 27 19 11 3;
61 53 45 37 29 21 13 5;
63 55 47 39 31 23 15 7];
IP0=reshape(IP',1,64);
%转换成行向量
D_IP=D(IP0);%对D初始置换
%E盒为数据扩展
E=[32, 1, 2, 3, 4, 5;
4, 5, 6, 7, 8, 9;
8, 9,10,11,12,13;
12,13,14,15,16,17;
16,17,18,19,20,21;
20,21,22,23,24,25;
24,25,26,27,28,29;
28,29,30,31,32,1];
S1=[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7;
0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8;
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0;
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13];
S2=[15, 1, 8, 14, 6, 11, 3, 4, 9,