图3.2的右边是使用56比特密钥的方法。密钥首先通过一个置换函数,然后,对加密工程的每一轮,通过一个左循环移位和一个置换产生一个子密钥。其中每轮的置换都相同,但由于密钥被重复迭代,所以产生的每轮子密钥不相同。
子密钥产生过程
子密钥产生过程的输入,为使用者持有的64位初始密钥。加密或解密时,使用者将初始密钥输入至子密钥产生流程中。首先经过密钥置换A,将初始密钥的8个奇偶较验位去掉。留下真正的56位初始密钥。接着,分为两个28位分组C0及D0,再分别经过一个循环左移函数,连结成56位数据,再按密钥置换B做重排,便可输出K1(48位),依此类推。
要注意的是,密钥置换A的输入为64位,输出为56位;而密钥置换B的输入和输出分别为56位和48位。
1、子密钥产生过程示意图3.3
2、密钥置换A如图3.4
经密钥置换A,K由64bit成为56bit的重新排列,成为C0D0
3、循环左移位数如表3.1
4、密钥置换B如图3.5
经密钥置换B,密钥变为 6×8=48位的轮子密钥。未入选的:9、18、22等密钥置换B是混乱+压缩。
图3.3 子密钥产生过程
图 3.4密钥置换A
表3.1 循环左移位
轮数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
图3.5 密钥置换B
3.3.2 初始置换
表3.2 初始置换表
(a)初始置换表 (b)逆初始置换表
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 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 40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 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
初始明文按照IP重排;16轮后的密文按照IP-1重排即为最后密文。
3.3.3 DES轮结构
图3.6 DES加密算法的轮结构
首先看图3.6的左半部分。将64比特的轮输入分成各为32比特的左右两半,分别记为L和R 。
和Feistel网络一样,每轮变换可由以下公式表示:
Li=Ri-1
Ri=Li-1⊙F(Ri-1,KI)
图3.7扩展变换 (选位表E)
Ri的32bit →48bit两边的是重复选中的
函数F(R,K)的计算过程:
图3.8f(Ri-1,Ki)流程图
3.3.4 DES的S盒定义
图3.9DES的S-盒
F中的代换有8个S盒组成,每个S盒的输入长为6比特、输出长为4比特,其变换由上表定义,每个S盒给出了4个代换(由一个表的4行给出)。
对每个盒Si,其6比特输入中,第1个和第6个比特形成一个2位二进制数,用来选折Si的4个代换中的一个。6比特输入中,中间4位用来选折列。行和列定后,得到其交叉位置的十进制数,将这个数表示为4位二进数即得这一S盒的输出。
3.3.5 DES加密算法的具体步骤
本模块是用来完成电子商务交易过程中传输的数据的DES加密算法。DES加密算法是用64位明文和64位密钥进行相关的运算得到。具体的实现步骤为:
1. 将输入的明文字符转为64位的二进制代码
2. 将输入的密钥字符转为64位的二进制代码
3. 将64位明文二进制进行位变换
4. 将变换后的明文二进制分为左右两个32数组 DES信息安全传递系统的设计与实现(7):http://www.youerw.com/jisuanji/lunwen_9548.html