- DES 是一种典型的块加密方法:它以64位为分组长度,64位一组的明文作为算法的输入,通过一系列复杂的操作,输出同样64位长度的密文。
- DES 使用加密密钥定义变换过程,因此算法认为只有持有加密所用的密钥的用户才能解密密文。
- DES 采用64位密钥,但由于每8位中的最后1位用于奇偶校验,实际有效密钥长度为56位。密钥可以是任意的56位的数,且可随时改变。其中极少量的数被认为是弱密钥,但能容易地避开它们。所有的保密性依赖于密钥。
- DES 算法的基本过程是换位和置换
输入64位 -> 初始置换IP -> 16轮迭代T -> 交换置换W -> 逆置换IP_1 -> 输出64位
工具:IP 置换表 操作:置换(将输入的 64 位明文进行重排,即将第 58 位放到第 1 位,第 50 位放到第 2 位……以此类推。) 结果:64 位明文 -> 64 位
- 子密钥生成:根据给定的 64 位密钥 K,生成 16 个 48 位的子密钥 K1 - K16,供 Feistel 轮函数调用
- Feistel 轮函数:产生 32 位输出,用于在每次迭代中产生下一个 R(64 位的右半部分)
- 交换置换 W:迭代时要将 64 位分割成左半部分 L 和右半部分 R,迭代结束时顺便进行左右交换
工具:IP_1 置换表 操作:置换(将 64 输入进行重排,即将第 40 位放到第 1 位,第 8 位放到第 2 位……以此类推。) 结果:64位 -> 64位密文
- 获取明文或密钥:使用 char 数组来读取 8 个字符的串,由于每个字符为 1 个字节,即 8 位,就可以得到 64 位的明文或密钥
- 位操作:使用 bool 数组来存储 64 位,数组的每个元素即为 1 个位,值为 0 或 1