深入理解并实现DES算法

一、DES简介

  • DES算法属于分组加密算法
  • 信息按照固定长度进行分组,分组长度为64位
  • 混淆和扩散是它采用的两个最重要的安全特性
    • 混淆是指通过密码算法使明文和密文以及密钥的关系非常复杂,无法从数学上描述或者统计。
    • 扩散是指明文和密钥中的每一位信息的变动,都会影响到密文中许多位信息的变动,从而隐藏统计上的特性,增加密码的安全。

需要注意的地方是掌握DES算法的16轮加、解密流程以及子密钥的产生流程。

二、DES实现大纲

在我的另一篇博客《加密算法之对称加密–DES》已经提到过DES算法的大致过程,整个流程如下图:
这里写图片描述
为了深入理解整个流程,我们将细化讲解DES算法里十六轮迭代变化中的子密钥生成以及F函数

三、DES算法之子密钥生成

1. 子密钥生成流程

流程图

这里写图片描述

子密钥置换选择1(把64位的密钥变为56位长)

假设原密钥为 K s = k 1 , k 2 , k 3 , . . . . . . , k 64 K_s= k_1,k_2,k_3,......,k_{64} Ks=k1,k2,k3,......,k64

DES算法的实际密钥长度为56,因为64位原密钥每8位的最后一位,即第8,16,24,32,40,48,56,64位为校验位。通过如下的置换规则,将实际的 56 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 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 \begin{array}{lllllll} 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 & 54 & 46 & 38 & 30 & 22 \\ 14 & 6 & 61 & 53 & 45 & 37 & 29 \\ 21 & 13 & 5 & 28 & 20 & 12 & 4 \end{array} 57110196371421495821155626134150593475461533425160394653282534435231384520172635442330371291827361522294

因此通过置换选择1之后,56位密钥为 K s ′ = k 1 , k 2 , k 3 . . . . . . k 56 K_{s' }= k_1,k_2,k_3......k_{56} Ks=k1,k2,k3......k56,其中 k 1 = K s [ 57 ] , k 2 = K s [ 49 ] , k 3 = K s [ 41 ] , . . . . . . k 56 = K s [ 4 ] k_1 = K_{s[57]}, k_2 = K_{s[49]},k_3 = K_{s[41]},......k_{56} = K_{s[4]} k1=Ks[57],k2=Ks[49],k3=Ks[41],......k56=Ks[4]

子密钥迭代变换

实际密钥 K s ′ = k 1 , k 2 , k 3 . . . . . . k 56 K_{s' }= k_1,k_2,k_3......k_{56} Ks=k1,k2,k3......k56

(1)分组:将56位实际密钥分为Ci和Di两组

  • C i = k 1 , k 2 , . . . . . . , k 28 C_i = k_1,k_2,......,k_{28} Ci=k1,k2,......,k28
  • D i = k 29 , k 30 , . . . . . . k 56 D_i = k_{29},k_{30},......k_{56} Di=k29,k30,......k56

(2)循环移位(左移)

  • 移位判断表:
    1 1 9 1 2 1 10 2 3 2 11 2 4 2 12 2 5 2 13 2 6 2 14 2 7 2 15 2 8 2 16 1 \begin{array}{llll} 1 & 1 & 9 & 1 \\ 2 & 1 & 10 & 2 \\ 3 & 2 & 11 & 2 \\ 4 & 2 & 12 & 2 \\ 5 & 2 & 13 & 2 \\ 6 & 2 & 14 & 2 \\ 7 & 2 & 15 & 2 \\ 8 & 2 & 16 & 1 \end{array} 123456781122222291011121314151612222221
    第一列和第三列代表迭代次数,第二列和第四列代表对应的循环左移位数。
  • 第1,2,9,16轮迭代时循环左移一位,其余循环左移两位
  • 最终得到:
    • 循环左移一位: C i ′ = k 2 , k 3 , . . . . . . k 28 , k 1 ; D i ′ = K 30 , k 31 , . . . . . . k 56 , k 29 C_{i'}=k_2,k_3,......k_{28},k_1;D_{i'}=K_{30},k_{31},......k_{56},k_{29} Ci=k2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值