多语言展示
当前在线:485今日阅读:60今日分享:41

des加密算法详解

DES是对称性加密算法,即加密和解密是对称的,用的是同一个密钥DES只处理二进制数据,所以需要将明文转换成为2进制数据DES每次处理64位的数据,所以应该将明文切割成64位的分组,当最后一组数据不足64位的时候,高位补0DES使用64位的密钥,但因为密钥中的每8位会被忽略,所以有效的密钥长度是56位,从而产生16个48位的子密钥每64位数据一个块,是DES的永恒组织方式
工具/原料

电脑

方法/步骤
1

具体样例分析:(仅以一组64位数据为例分析加密过程)明文M是:8787878787878787密钥K是:0E329232EA6D0D73上面的信息都是16进制的,转换为2进制明文M是:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111密钥K是: 10011 11011111 11110001

2

根据密钥生成16个子密钥1.根据密钥初始置换表将64位的密钥转化为58位的密钥57 49 41 33 25 17 91 58 50 42 34 26 1810 2 59 51 43 35 2719 11 3 60 52 44 3663 55 47 39 31 23 157 62 54 46 38 30 2214 6 61 53 45 37 2921 13 5 28 20 12 4由于上表中第一个元素为57,这将使原秘钥的第57位变换为新秘钥K+的第1位。同理,原秘钥的第49位变换为新秘钥的第2位……原秘钥的第4位变换为新秘钥的最后一位。注意原秘钥中只有56位会进入新秘钥,上表也只有56个元素。原密钥K: 10011 11011111 11110001新密钥K:1111 001 0101 1001111 0001111

3

将新密钥拆分成C0和D0,每组都有28位比如新密钥C0:1111 001D0:0101 1001111 0001111

4

根据密钥轮次左移表,左移特定的位数1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  161  1  2  2  2  2  2  2  1   2    2    2    2    2    2   1比如第一轮是左移1位,第二轮也是左移1位,第三轮是左移两位所以C1:1111D1:1110下面给出C1,D1到C16,D16的数据:C1 = 1111D1 = 1110C2 = 1111D2 = 1101C3 = 1111D3 = 0101C4 = 1100D4 = 1111C5 = 1110D5 = 1101C6 = 1011D6 = 1101C7 = 11111111D7 = 1111C8 = 111111D8 = 1101C9 = 11111D9 = 1011C10 = 1111D10 = 11111C11 = 1101D11 = 1111C12 = 0101D12 = 1111C13 = 0101D13 = 1100C14 = 11111111D14 = 1111C15 = 111111D15 = 1111C16 = 11111D16 = 1111需要记住的是:每一对Cn 和 Dn都是由前一对Cn-1 和 Dn-1移位而来!

5

得到Cn,Dn后合并CnDn,然后根据密钥压缩置换表将56位密钥压缩成48位的子密钥密钥压缩置换表:14 17 11 24 1 53 28 15 6 21 1023 19 12 4 26 816 7 27 20 13 241 52 31 37 47 5530 40 51 45 33 4844 49 39 56 34 5346 42 50 36 29 32每对子秘钥有56位,但PC-2仅仅使用其中的48位。于是,第n轮的新秘钥Kn 的第1位来自组合子秘钥CnDn的第14位,第2位来自第17位,依次类推,知道新秘钥的第48位来自组合秘钥的第32位

6

下面给出子密钥K1到K16的数据:K1 = 00 001 111111 00 110010K2 = 011110 011 011 111100 10K3 = 01 11 01 111110 011001K4 = 011100 101 01 11 011101K5 = 011111 001110 11 111 001110 101000K6 = 011 01 01 101100 101111K7 = 111 01 111101 10 111100K8 = 111101 111 111 01 111011K9 = 111 101111 101 011110 011110 000001K10 = 101100 011111 001101 00 10 001111K11 = 001 111111 01 101101 001110 000110K12 = 011101 01 11 00 101001K13 = 10 01 111110 101 000001K14 = 01 001110 11 101110 011100 111010K15 = 101111 111 001101 001111 01 001010K16 = 11 11 00 011111 110101到这里,16个48位的子密钥就生成了

7

加密数据块 明文初始变换,仍然是64位变为64位58 50 42 34 26 18 10 260 52 44 36 28 20 12 462 54 46 38 30 22 14 664 56 48 40 32 24 16 857 49 41 33 25 17 9 159 51 43 35 27 19 11 361 53 45 37 29 21 13 563 55 47 39 31 23 15 7参照上表,M的第58位成为IP的第1位,M的第50位成为IP的第2位,M的第7位成为IP的最后一位。对明文M:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111IP:1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010这里M的第58位是1,变成了IP的第1位。M的第50位是1,变成了IP的第2位。M的第7位是0,变成了IP的最后一位。

8

数据分组:IP分为左半边的L0和右半边的R0对上面的IPL0:1100 1100 0000 0000 1100 1100 1111 1111R0:1111 0000 1010 1010 1111 0000 1010 1010

9

16轮迭代然后我们定义一个函数f,输入一个32位的数据和一个48位的子密钥,产生一个32位的输出从n=1到n=16Ln=Rn-1Rn=Ln-1^f(Rn-1,Kn)通俗的说就是当前迭代的L是上一次迭代的L,当前迭代的R是上一次迭代的L异或f(上次迭代的R,当前子密钥)

10

下面就是要了解f函数是怎么工作的了f函数第一步:32位的数据扩展成为48位明文扩展表:32 1 2 3 4 54 5 6 7 8 98 9 10 11 12 1312 13 14 15 16 1716 17 18 19 20 2120 21 22 23 24 2524 25 26 27 28 2928 29 30 31 32 1对R0:1111 0000 1010 1010 1111 0000 1010 1010扩展一下:E(R0) = 011110 10 01 10 010101f函数第二步:将扩展的结果和48位的子密钥进行异或运算比如,对K1 , E(R0),我们有:K1 = 00 001 111111 00 110010E(R0) = 011110 10 01 10 010101K1^E(R0) = 011 011110 111 10 100111.f函数第三步:S盒替代,48位变成32位一共有8个S盒,分别位S1到S8,所以48位的数据可以分为8组,每组6个数据,用a1a2a3a4a5a6表示每组数据对应一个S盒a1和a6组合成2进制,然后转换为10进制,代表对应S盒的行号a2,a3,a4,a5组合成2进制,然后转换为10进制,代表对应S盒的列号从行号和列号可以从对应的S盒中确定一个数X,X是十进制的,转化为4位的二进制输出所以每个S盒都是输入6位,输出4位,所以最后输出的数据是4*8=32位

11

关于解密:解密只要将密文看作明文,然后子密钥逆序使用就可以还原成为明文,因为DES是对称加密算法

推荐信息