您好,欢迎来到年旅网。
搜索
您的当前位置:首页例2-1_DES举例

例2-1_DES举例

来源:年旅网
例:设明文m=computer,密钥K=program,用DES算法将明文加密。

解: 加密预处理:将明文的每一个字符用ASCII码表示,再转化为二进制码:

字符 ASCII值

二进制

字符 ASCII值

二进制

c 99 1100011 p 112 1110000 o 111 1101111 r 114 1110010 m 109 1101101 o 111 1101111 p 112 1110000 g 103 1100111 u 117 1110101 r 114 1110010 t 116 1110100 a 97 1100001 e 101 1100101 m 109 1101101 r 114 1110010 再将明文按位比特分组得:

m=01100011 01101111 01101101 01110000 01110101 01110100 01100101 01110010 =m1m2m3 …..m63m

密钥k原只有56位,在第8、16、24、32、40、48、56、位补0凑够位: k=01110000 01110010 01101111 01100111 01110010 01100001 01101101

k=011100000 011100010 011010111 011000111 011010010 010100001 0011011010=k1k2k3k4 …..k63k

加密第1步:将明文m作IP置换后得:m58m50m42 …..m15m7

m’=11111111 10111000 01110110 0101011 00000000 11111111 00000110 10000011 分为左右两半,得

L0=11111111 10111000 01110110 01010111 R0=00000000 11111111 00000110 10000011 置换IP如下(输入位,输出位):

1

58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 46 38 30 22 14 6 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

加密第2步:先求子密钥(将密钥K用PC-1重新排序,第8、16、…56、位不参加,得K’=k57k49k41k33 …..k12k4,将输出的56位K’分为左右各半,左28位C0、右28位为D0;将C0、D0分别用LS1循环左移得C1、D1,合并C1、D1后用PC-2选出48位为子密钥K1):

C0=11101100 10011001 00011011 1011 D0=10110100 01011000 10001110 0110

因是第1次迭代用LS1循环左移1位得,

C1=1101100 10011001 00011011 10111 D1=0110100 01011000 10001110 01101

经PC-2后得

K1=00111101 10001111 11001101 00110111 00111111 01001000 PC-1如下(输入56位,输出56位):

57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4

2

Ci、Di循环左移LSi位数:

i 1 2 3 4 5 6 7 8 9 1011

12

13 14 15 16

1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 位数 1 PC-2如下(输入56位,输出48位):

14 17 11 24 01 05 03 2815 06 21 10 23 19 12 0426 08 16 07 27 20 13 0241 52 31 37 47 55 30 4051 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32

再求L 1=R0,R1=L 0⊕ f(R0,K1)完成第1次迭代:

其中⊕ 为不进位加法,f(R0,K1)的计算如下:

先将32位R0用扩展置换E膨胀为48位,然后将膨胀结果与48位的子密钥K1作异或运算,再将运算结果分为8组,每组6位,分别通过S1、S2、…S8盒缩小为4位共32位,最后将S盒结果作P置换完成f(R0,K1)的计算。

32位R0=00000000 11111111 00000110 10000011—E膨胀→

10000000 00010111 11111110 10000000 11010100 00000110 (48位)

K1=00111101 10001111 11001101 00110111 00111111 01001000 (异或) 10111101 10011000 00110011 10110111 11101011 01001110 分8组:101111 011001 100000 110011 101101 111110 101101 001110 经S盒缩为32位: 0111 0110 1101 0100 0010 0110 1010 0001

S1(101111)= S1(b1b2 b3b4b5b6)= S1(b1b6,b2b3b4b5)= S1(3,7)=7=0111, S2(011001)= S2(01,1100)= S2(1,12)=6=0110 …

S8(001110)= S8(00,0111)= S8(0,7)=1=0001

—P置换→ 01000100 00100001 10011111 10011011

于是

3

L0:11111111 10111000 01110110 01010111

01000100 00100001 10011111 10011011 (不进位加) 可得 R1= 10111011 10011001 11101001 11001100

E扩展置换如下(输入32位,输出48位):

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

P置换(输入32位,输出32位):

16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25

加密第3步:循环迭代16次求L i=Ri-1,Ri=L i-1⊕ f(Ri-1,Ki)至L16、R16。

4

将C1、D1分别用LS2循环左移得C2、D2,合并C2、D2后用PC-2选出48位为子密钥K2;将32位R1用扩展置换E膨胀为48位,然后将膨胀结果与48位的子密钥K2作异或运算,再将运算结果分为8组,每组6位,分别通过S1、S2、…S8盒缩小为4位共32位,最后将S盒结果作P置换完成对f(R1,K2)的计算。

如此类推迭代16次后得:

L16 = 01101001 11111110 10101110 00110011 R16 = 01011000 10101000 01000001 10111000

加密第4步:将L16、R16合并用IP-1作末置换得到加密结果。

加密结果为:01001001 00010101 00010100 11110110 10010011 01110111 11011000 00110110

: IP-1置换如下(输入位,输出位)

40 8 48 16 56 24 32 39 7 47 15 55 23 63 31 38 6 46 14 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25

5

拆分 与Ki异或加密过程: IP置换 Ri做E膨胀 S盒 → P置换

求子密钥:

合并 IP-1置换

重排→LSi左移→PC-2缩选

(……迭代16次)

6

PC-1

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务