前言时刻:
大名鼎鼎的 DES (data encryption standard)加密算法,第一代的标准加密算法,虽然被后来的 AES 取代,但是思路还是可以学习下的。它是典型的分组加密算法,同时也是对称加密。
加密过程真的很复杂,看第一遍的时候,很懵逼,又读了一遍终于搞明白了,大致过程就是先置换然后分组代换,之后逆置换就得到密文,最重要的就是分组那一块。下面开始总结,要是有时间,手写下加密算法也不错。
1、初识DES
DES 加密算法主要分为:
- 处理明文,将其分为每64位一组,对每组进行下面的处理。
- 对每组进行初始置换操作,
- 子秘钥生成器
- 16次迭代加密
- 逆置换
- 完毕
1、初始置换
首先做初始置换,明文先按照1到64进行排序,然后按照下面表中的序号进行排序置换,就变成了58 50 42 ……
看下面图需要注意的是,红色方框标出的序号虽然标是1 2 3……,但是其实58 50 42 ……,因为作者是为了和后面做迭代变换的序号相统一。
将置换后的64为数据分开,分为左32位,和右32位。
2、16次迭代变换
秘钥(64位)对明文进行16次的迭代,分为左32位 L 和右32位 R,每次迭代都是对右 R 进行处理,在每次迭代之后,让 L 与 R 进行模2相加得到 R1 然后赋给 R,将之前没处理的 R 赋给 L,参与下一次的迭代运算中。
其中最重要的就是子秘钥加密那一块。
2.1 选择扩展运算
核心思想是将 R 的32位变成48位,其变换规则如下:虽然不知道为啥要这样变换,但是肯定有其道理的,搞不懂。
2.2 子秘钥生成
超重点,是AES的精髓,请看下面的介绍。
-
首先初始化的秘钥 K 是64位,去除其中的奇偶校验位(8位)8、16、24、32、40、48、56、64,得到剩下的56位 K0。
-
进行第一次的PC-1置换操作,56位秘钥按照下方的置换规则,之后对半分为左 和右 ,然后参与下面的PC-2的置换操作。
-
对上面第一次置换得到的 和 ,进行移位操作,规则是:第 次迭代,就左移 位,具体规则如下:
例如:,,则 是第二轮,就在 的基础上左移一位。 ,。
则 是第三轮,就在 的基础上左移一位,。
则 是第三轮,就在 的基础上左移两位,。
-
进行第二次的 PC-2 置换操作,首先删掉 C 中的9、18、22、25和 D 中的7、9、15、26,然后进行以下规则的置换操作,就可得到参与第 次加密的子秘钥 。
- **最后:**就是用子秘钥 和之前选择扩展得到的48位明文进行模2相加,最终得到的就是子秘钥加密后的密文
2.3 选择压缩运算
使用子秘钥加密后的48密文进行压缩,分成8组,每组6位,按照压缩规则变成4位,最后输出32位。压缩规则如下:
设每组的数据是 ,取其中的 作为行数,取剩余的 作为列数,然后在 S 盒中找到对应的值的二进制数,就是要要输出的4位数。
2.4 置换运算
置换规则如下,将上面压缩完毕得到的数据 与左边 进行模2相加得到的值赋给 ,而 则赋给 。之后进入下次的循环从 2.1 选择扩展运算 开始,一直循环16次才结束迭代置换操作。
16次迭代全部结束后,拼接左右R和L变成64位,进行最后的逆置换,就可得到最终的密文。
3、逆置换
逆置换和初始置换值相反的,规则如下:
这样就得到最终的密文,结束。
手写算法:
后补
总结:
有点复杂,多看看就好,接下来写AES的加密以及序列密码。