DES的一般设计准则包括;
(1) 随机性性,即输出和输入之间是无规律的;
(2) 完整性,每个输出位都是所有出入位的一个复杂函数;
(3) 雪崩效应,即任意改变输入中的一位,平均要导致一半的输出位被改变;
(4) 非线性,即加密函数对于任何密钥来说全部都是非线性的;
(5) 相关免疫性,即输入是统计上独立于任何输入的子集,它不会与输入的任何子集有关联。DES中多次重复交替使用代替运算S和换位运算P这两种变换,以此达到混乱和扩散数据的目的[5]。
图1 DES加密算法的结构
明文经过初始置换后顺序改变,然后分成左右各32bit的两组进行之后,右边的那组直接作为下一轮运算的左半部分,而左边组与经过f函数后的数据进行异或运算后作为下一轮的右边组,经过十751次这样的运算之后的两组数据组合在一起输入到逆置换IP中再次经过重新排列后即为所要获得的密文。
1.2.1 初始置换IP
输入64位的明文M(M1,M2,…,M64),经过IP置换后就得到Z(M58,M50,…,M7)[6]。例如原来数据前32位都为1后32位都是0,那么经过初始置换之后数据就会变成00001111000011110000111100001111000011110000111100001111。
表1 初始置换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
初始置换IP如表1所示,它的主要作用就是对64位的明文进行换位重新排列,以求达到改变明文中各位排列顺序的目的。通过IP置换将原文中的第58位的数放到第一位,第五十位的数放到第2位,依次类推第七位的数放到最后那一位。初始置换表也是有规律的,其规律为上四行数据全部为偶数,而且从上到下,从左到右是由小到大排列,下四行全都是奇数,而且从上到下,从左往右是按照由小到大的顺序来排列的,整个表的左半部分均是30位之后的数,右半部份都是30位之前的数。
1.2.2 子密钥的产生
子密钥的产生大致可以分为三个主要的步骤:置换选择PC1,循环左移和置换选择PC2。初始输入的密钥为64位的数据,这些数据首先会经过置换选择PC1进行重新排列,然后会将置换之后的64位,除去8个奇偶校验位,也就是58位数据,分成左右各有28位数据的两个组,将其分别记做E0和F0。紧接着在第1轮对E0的数据进行循环左移一位而对F0的数据循环右移一位的操作,后面各轮所需要循环位移的位数全部都可以由表2得到,该表就显示出了在第i次迭代时密钥循环左移和循环右移的位数各为多少[7]。
表2 循环位移
迭代次数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VHDL基于DES数据加密标准的加解密系统设计(2):http://www.751com.cn/zidonghua/lunwen_8869.html