DES数据加密标准 (Data Encryption Standard)是一个16轮的Feistel型结构密码,它的分组长度为64比特,用一个56比特的密钥来加密一个64比特的明文串,输出一个64比特的密文串。其中,使用密钥为64比特,密钥位数是56比特,另8位用作奇偶校验,加密用的位数是48比特。加密的过程是先对64位明文分组进行初始置换,然后分左、右两部分分别经过16轮迭代,然后再进行循环移位与变换,最后进行逆变换得出密文。加密与解密使用相同的密钥,因而它属于对称密码体制。
DES算法流程
- 初始置换IP
- 生成16个48位的子密钥
- 16轮feistel结构迭代
a) 扩展置换E
b) S盒代换
c) 置换P - 逆初始置换IP-1
Feistel结构:feistel结构把任何函数(一般称为F函数,又称轮函数)转化为一个置换。
子密钥的生成:子密钥K的生成大致分成三个过程:置换选择PC1,循环左移,置换选择PC2。
Ln = R(n - 1);
Rn = L(n - 1)⊕f(Rn-1,kn-1)
1.初始置换
DES算法使用64位的密钥key将64位的明文输入块变为64位的密文输出块,并把输出块分为L0、R0两部分,每部分均为32位。初始置换规则如下:
注意:这里的数字表示的是原数据的位置,不是数据
初始置换把64位明文的第1位置换到第40位,第2位置换到第8位,第3位置换到第48位。以此类推,最后一位是原来的第7位。
M1=(123456789ABCDEF)16
=(00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111)2
经过IP置换,并分成左右两部分,结果为:
L0=11001100 00000000 11001100 11111111
R0=11110000 10101010 11110000 10101010
2.生成16个48位的子密钥
D