DES

本文详细介绍了DES加密过程,包括秘钥生成、初始置换、加密函数的细节,并展示了C语言实现DES算法时遇到的问题及解决方案,如位运算、移位操作的注意事项等。
摘要由CSDN通过智能技术生成

一、DES加密过程

  1. 64位秘钥经子秘钥产生算法产生16个子秘钥:K1、K2……、K16, 分别供第一次到第16次加密迭代使用。
  2. 64位明文首先经过初始置换IP,将数据打乱重新排列并分成左右两半。左边32位构成L0,右边32位构成R0.
  3. 由加密函数f实现子秘钥K1对R0的加密,结果为32位的数据组f(R0, K1) 。f(R0, K1)再与L0模2相加(即异或),又得到一个32位的数据组L0&f(R0, K1). 以L0&f(R0, K1)作为第二次加密迭代的R1,
    以R0作为第二次加密迭代的L1.至此,第一次加密迭代结束。
  4. 第二次到第16次加密迭代分别用子秘钥K2到K16进行,其过程如上。
  5. 第16次迭代结束,产生一个64的数据组。以其左边32位作为R16, 以其右边作为L16,两者合并再经过逆初始置换IP-1,将数据重新排列,便得到64位密文。加密结束。

:下面提到的二进制位数都是从左往右数的。

二、DES的算法细节

<1> 子秘钥的产生
64位秘钥经过置换选择1循环左移置换选择2等变换,产生16个48位长的子秘钥。
如图:
DES子秘钥生成
1. 64位秘钥中的每个字节的最后一位为奇偶校验位,所以秘钥的真实长度为56位,将这56位经置换选择1分为左右各28位,置换选择1的矩阵如下:

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

C0的各位依次为原始秘钥的57, 49, ……..,36位;
D0的各位依次为原始秘钥的63 ,55, ……..,4位。
2. 将得到的C0,D0各做循环左移,每一轮的循环左移如下表:

迭代次数 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. 右移后得到C1,D1,合并后经置换选择2得到子秘钥K1,置换选择2如下表:

14 17 11 24 1   5
3  28 15 6  21 10
23 19 12 4  26  8 
16 7  27 20 13  2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53 
46 42 50 36 29 32

C1、D1合并为56位数,从中选取第14位,17位……32位作为子秘钥K1的第1-32位。
4. 迭代上面2-3步,分别得到K2-K16.

<2> 初始置换IP
将64位明文打乱重排并分为左右两半。左32位为L0, 右32位为R0, 供后面的加密迭代使用。置换IP的矩阵如下

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

置换后64位数据的第1-64位依次为原明文的第58,50,… ,7位。

<3>加密函数
上面得到的L0,R0分别作为加密函数的输入,先经过选择运算将32位输入扩展为48位,以便与48的子秘钥进行异或,还有后续的S盒替换。
1. 选择运算
选择运算通过重复选择某些数据位来达到数据扩展的目的,选择运算的矩阵如下:

        32 1  2  3  4   5
        4  5  6 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值