对称密码算法DES中的子密钥生成算法(密钥扩展算法)

对称密码算法DES的讲解:

1. 《信息安全原理与实践》 Matk Stamp  第三章  DES 

2. http://hi.baidu.com/suntopdang/blog/item/5a3f7dee46f5663fadafd5fd.html

3. http://www.docin.com/p-23162685.html

 

      网上这两篇文章算还是讲得不错的。不过我刚开始看的时候,感觉书上和网上的资料都讲的太含糊,很多转换的知识点都是不清不楚,自己看得是不明不白,后来请教一位同学才把这个问题搞明白(当然他也是想了很久才想明白的)。

      整个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 

 

 

具体实现的代码:

 

 

 

 

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值