DES算法
来源:互联网 发布:js集合和数组 编辑:程序博客网 时间:2024/06/16 18:48
1.DES算法
DES(Data Encryption Standard),是IBM在上世纪70年代开发的单密钥对称加解密算法。该算法用56位密钥+8位奇偶校验位=64位的密钥对以64位为单位的数据块进行16轮加解密处理。DES的安全性不依懒于算法的保密,安全性仅以加密密钥的保密为基础。
1.1子密钥生成过程
用户输入的密钥被转化成64比特的二进制,然后按照密钥置换函数PC-1(8X7)压缩置换成56位,输出前28位为C0输出后28位为D0。然后将C0和D0进行16轮的循环左移及压缩置换PC-2(8X6),生成16个48位的字密钥。
Ø PC-1(8X7)压缩置换
假设密钥K(64位)=133457799BBCDFF1,红色部分为奇偶校验位。
K(64位)=00010011 00110100 01010111 01111001
10011011 10111100 11011111 11110001
表1密钥置换函数PC-1(8X7)
PC-1
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
对K使用PC-1(8X7)压缩置换,去掉8个校验位,从而得到K'。
K'(56位)=1111000 0110011 0010101 0101111
0101010 1011001 1001111 0001111
C0和D0的分类
图1密钥置换输出的分法
C0(28位)=1111000 0110011 0010101 0101111
D0(28位)=0101010 1011001 1001111 0001111
表2循环左移16轮
迭代顺序
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
C1和D1分别为C0和D0左移1位···C3和D3分别为C2和D2左移2位···最后得到C1D1~C16D16。例如:
C1=1110000 1100110 0101010 1011111
D1=1010101 0110011 0011110 0011110
C2=1100001 1001100 1010101 0111111
D2=0101010 1100110 0111100 0111101
PC-2(8X6)压缩置换
每进行一轮循环左移,就是用PC-2(8X6)进行压缩置换(由56位压缩为48位)得到一个字密钥。在压缩过程中第9、18、22、25、35、38、43、54共8位数据被丢掉。
表2压缩置换PC-2(8X6)
PC-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
置换过程如下图:
1.2加密
DES算法是对64位的数据块进行加密操作,不足64位要补位到64位长。明文M经过长度都为48比特的16个字密钥K来加密,最后生成长度为64比特的密文E。
1.2.1 IP初始置换
假设明文M=0123456789ABCDEF,即
M(64位)=0000 0001 0010 0011 0100 0101 0110 0111
1000 1001 1010 1011 1100 1101 1110 1111
经IP初始转换后为:
IP(64位)=1100 1100 0000 0000 1100 1100 1111 1111
1111 0000 1010 1010 1111 0000 1010 1010
初始置换函数IP(8X8)
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
置换后的数据分为32位左半部分L0和32位的右半部分R0。
L0(32位)=1100 1100 0000 0000 1100 1100 1111 1111
R0(32位)=1111 0000 1010 1010 1111 0000 1010 1010
1.2.2 加密数据
1) 将Rn通过E盒从32位置换为48位;
2) 将置换结果与Kn进行异或;
3) 异或后的结果通过S盒转换为32位;
4) 经过S盒得到的32位再进行P盒置换;
5) P盒置换后的结果与Ln进行异或,然后交换左右两部分,进行下一轮迭代;
6) 完成16轮迭代后,将得到的两部分数据合在一起,将L16与R16交换,在经过一个IP逆置换即可得到64位的密文。
运算规则:
* E盒置换
由于密钥K为48位,而Rn为32位,所以要将Rn置换为48位。扩展置换E盒如下表:
32
1
2
3
4
5
4
5
6
7
8
9
8
9
10
11
12
13
12
13
14
15
16
17
16
17
18
19
20
21
20
21
22
23
24
25
24
25
26
27
28
29
28
29
30
31
32
1
* S盒置换
将异或运算得到的48位结果数据分成8个6位的块,将每一块通过对应的一个S盒产生一个4位的输出,S盒接收6位的输入,经过置换输出4位的数据。(每块对应的S盒都不同)
将6位中的B1B6记为X,B2B3B4B5记为Y。X为行数,Y为列数,然后查出相应S盒的X行Y列所对应的整数,即为S盒的输出。
DES中其他算法都是线性的,而S盒运算则是非线性的,S盒不易于分析,它提供了更好的安全性。所以S盒是算法的关键所在。
* P盒置换
产生一个32位的输出,P盒置换数据如下表:
16
7
20
21
29
12
28
17
1
15
23
26
5
18
31
10
2
8
24
14
32
27
3
9
19
13
30
6
22
11
4
25
* IP逆置换
对R16L16运用一次IP逆置换(8X8),置换函数如下表:
40
8
48
15
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
1.3解密数据
解密过程和加密过程完全类似,只不过将16圈的字密钥序列顺序倒过来。- DES & 3DES算法
- DES算法
- des算法
- DES算法
- DES算法
- DES算法
- DES算法
- DES算法
- DES算法
- DES算法
- des算法
- DES 算法
- DES算法
- DES算法
- DES 算法
- des算法
- DES 算法
- DES算法
- 图形学算法与相应的源码-帮助你重复的造三维图形学以及三维可视化领域的轮子
- PyTorch基本用法(一)——Numpy,Torch对比
- SQL四种语言:DDL,DML,DCL,TCL
- 完美解决python3.6环境下,使用pyinstaller打包.exe时报错的情况。
- Vue2 监听属性改变watch
- DES算法
- hdc1000 linux下驱动
- 蓝牙开发网址记录
- 抓包工具+Access注入
- 多继承小记
- map
- echarts3 柱状图数字在柱的顶部显示
- spring data es拼音插件
- postgreSQL常用语句