1.了解Feistel网络结构
一次加密
![](https://img.haomeiwen.com/i23834525/7d87b61414221454.png)
首先密钥和其他数据进行替换和换位生成密钥流,然后与明文进行异或运算生成密文
多次加密
![](https://img.haomeiwen.com/i23834525/ef4f8818e205fd96.png)
首先密钥和数据data0进行替换和换位生成密钥流,然后与明文进行异或运算生成密文1,然后再将密钥和数据data1进行换位和替换生成密钥流与密文1进行异或运算得到密文2...,多次运算之后得到最终密文,这里我们可以把密钥的替换和移位加异或运算看成一个函数F,在函数F中进行这些运算
这里会发现一些问题,这些data0,data1,data2...是怎么生成的,我们可以将上述结构再进行改变
![](https://img.haomeiwen.com/i23834525/ec59cc5113bf3a0f.png)
将密文的输出作为F函数的输入数据进行运算得到最终的密文。
结构再进行变换
![](https://img.haomeiwen.com/i23834525/faa535f47d8c5b7f.png)
从这个结构中我们可以看到,每一步运算左右数据都进行交换,后面会解释Ln和Rn分别代表的什么,但是要值得注意,最后一步加密过程中,没有进行交换,这是为了保证加密运算和解密运算整个运算过程是相等的,即我们将密文c作为输入可以得到明文m。
2.DES结构
DES基本结构属于Feistel结构
大致加密过程
![](https://img.haomeiwen.com/i23834525/bc157f9df9941fcd.png)
1.64位密钥经子密钥产生算法生成16个子密钥:k1-k16
2.64位明文经过初始置换IP,将数据打乱并重新进行编排,分成左右两个部分,左边为L0,右边为R0
3.进行加密运算
Li=R(i-1)
Ri=L(i-1)异或f(Ri-1,ki)
4.经过16次的运算最终生成的L16和R16合并再进行逆初始置换,将数据重新进行并排,得到64位密文。
3.子密钥的产生
64位密钥经过置换选择1——>循环左移——>置换选择2的变换,最后生成48位的子密钥
![](https://img.haomeiwen.com/i23834525/d949e62e1ebb0aac.png)
观察每一个步骤
1.置换选择1(64位——>56位)
实在不想画图了
![](https://img.haomeiwen.com/i23834525/7d6349acbc84bfbd.png)
这个初始矩阵是固定的,举一个简单的例子说明生成过程
K = 133457799BBCDFF1
我们可以得到它的二进制形式(1为0001,3为0011.依次类推,并且将每八位写成一组。这样每组的最后一位都没有被用上。)
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
然后我们按照上面矩阵的数字对这个二进制数据进行重新排列
K+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111
然后,将这个秘钥拆分为左右两部分,C0 和 D0,每半边都有28位。
比如,对于新秘钥,我们得到:
C0 = 1111000 0110011 0010101 0101111
D0 = 0101010 1011001 1001111 0001111
2.循环移位
![](https://img.haomeiwen.com/i23834525/81febf2361b5f37c.png)
这个移位表也是固定的,举一个简单例子
C0 = 1111000011001100101010101111进行左移一位
C1 = 1110000110011001010101011111
3.置换选择2(56位——>48位)
![](https://img.haomeiwen.com/i23834525/f7c1732dbf749fe5.png)
这个矩阵也是固定的
具体的实现过程
现在我们知道了每一个密钥是如何产生的,我们就可以去研究DES算法的整体运算过程
1.初始置换IP
![](https://img.haomeiwen.com/i23834525/2bb5634bdc1dfcd8.png)
将明文中的数据进行矩阵排列
2.函数F的具体实现过程
我们观察公式Ri=L(i-1)异或f(Ri-1,ki),Ri-1是32位,而ki是48位,最终生成要是一个32位的数据,我们要知道里面的具体实现过程
![](https://img.haomeiwen.com/i23834525/6e4fae1d96962475.png)
我们可以观察到,Ri-1的数据首先经过扩展置换E由32位的数据变成48位然后再与Ki进行异或运算,最终生成的48位数据再经过S盒输出32位的数据,再经过置换P输出32bit的数据。
扩展置换E的实现
![](https://img.haomeiwen.com/i23834525/88637370ba95b7d4.png)
最左边的一列都是第二列的数据往前减一位,而最后一列的数据是前一列的数据加一位。
S盒
![](https://img.haomeiwen.com/i23834525/8fd3fcfa942950e1.png)
例子
假如我们输入到S盒的一个数据为111010,我们把第一位和最后一位当作行号,则10=2,把中间的4位当成列号,则1101=13,即
S1(111010)=10,10的二进制是1010,所以当前S1的输出是1010
![](https://img.haomeiwen.com/i23834525/221603bf8b7e8166.png)
定义这8个函数S1,…,S8的表格如下所示:
S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
置换选择P
最终将32位的数据经过P盒,数据进行重排输出32位数据,至此F函数的实现过程讲述完毕
![](https://img.haomeiwen.com/i23834525/53b8c9e813328a8b.png)
总结:上面的所有矩阵都是固定的,文章中的图片来自与视频地址:https://www.bilibili.com/video/BV1Kt411h7nP,des算法真的特别重要对后面理解AES算法和SMS4算法,真的不好理解,所有笔记都是自己看视频和看其他文章理解的,太不容易了,如果觉得有帮助帮忙点一个赞,源码网上到处都是,不过首先先要把原理理解对吧。下一篇文章介绍AES算法,如果此文章有不足或者哪里不够清楚希望有大佬可以指明出来。
网友评论