发布网友 发布时间:2022-04-23 21:48
共1个回答
热心网友 时间:2022-07-12 21:10
转载整个DES算法太繁琐了,我只是挑选其中子密钥的生成这个知识点来写
了解相关专业名词:
1. 移位和循环移位:
移位就是将一段数码按照规定的位数整体性地左移或右移。循环右移就是当右移时,把数码的最后的位移到数码的最前头,循环左移正相反。例如,对十进制数码12345678循环右移1位(十进制位)的结果为81234567,而循环左移1位的结果则为23456781。
当时自己在这里栽过很大的跟头,这里的循环移位,指的是前后28位密码的位置循环左移,比如
49 42 35 28 21 14 7 42 35 28 21 14 7 0
0 50 43 36 29 22 15 循环左移一位 50 43 36 29 22 15 8
8 1 51 44 37 30 23 ————————> 1 51 44 37 30 23 16
16 9 2 52 45 38 31 9 2 52 45 38 31 49
2. 置换:
就是将数码中的某一位的值根据置换表的规定,用另一位代替。它不像移位操作那样整齐有序,看上去杂乱无章。这正是加密所需,被经常应用。
DES密钥扩展算法:
for each round i = 1,2,3....n
LK = cyclically left shift LK by ri bits
RK = cyclically left shift RK by ri bits
The left half of subkey Ki consists of bits of LP of LK
The right half of subkey Ki consits of bits of RP of RK
next i
具体的操作:
特别注意:这里讲的数字都是指密钥的具体位置,而不是密钥的内容
1. 我们将DES的56位密钥从左到右从0开始编号。首先扩展DES密钥的前28位,并进行置换,结果称为LK,DES密钥的LK是原始密钥的下列各位:
49 42 35 28 21 14 7
0 50 43 36 29 22 15
8 1 51 44 37 30 23
16 9 2 52 45 38 31
通俗讲,就是说第一位前面的28位密钥中,第一位放的元素就是原先56中的第49位,第二位就是原先的42位
2. 类似的,DES密钥的剩余28位称为RK,由原始密钥的下列各位构成
55 48 41 34 27 20 13
6 54 47 40 33 26 19
12 5 53 46 39 32 25
18 11 4 24 17 10 3
3. 在进行密钥扩张算法之前,还需要定义LP置换:
13 16 10 23 0 4 2 27 14 5 20 9
22 18 11 3 25 7 15 6 26 19 12 1
这也是我刚开始百思不得其解的地方,其实也很简单,就是将经过移位之后的左边的28位密钥重现编号,再按下标放好
缺少8,17,21,24
4.RP置换
12 23 2 8 18 26 1 11 22 16 4 19
15 20 10 27 5 24 17 13 21 7 0 3
缺少了6,9,14,25