DES算法
DES
- Data Encryption Standard,数据加密标准
- 分组加密算法
- 56位的**加密64位明文
- 64位的**每8位是一个奇偶校验位,只有56位有效**
- 把明文拆成n个64位明文数据块
一般结构图
初始(终止)置换
将输入的58位换到第1位,输入的第50位放到第2位…
扩展置换
- 经过 初始置换 的 64 位数据被分为左右 32 位数据,其中右边的 32 位数据经过 扩展置换 变成 48 位数据
- 其实就是在某些位置进行了填位操作
**置换
- 输入 64 位**K0,根据PC-1进行置换得到 56 位
- 把得到的 56 位分成左右两半各 28 位
- 根据循环左移表,分别将左右两半进行左移,拼在一起得到新的 56 位
- 将新得到 56 位**根据PC-2置换表进行置换,得到 48 位** K1(DES第一轮的子**),一共要产生16个轮子**,表示为 K1 到 K16
S盒压缩处理
- 经过扩展的 48 位输入和 48 位**进行异或运算后,再使用 8 个S盒压缩处理得到 32 位数据
- 实际上就是将 48 位输入分成 8 组 6 个元素,每块 6 位压缩为 4 位输出
- 取每组数据的第一位和最后一位,拼起来转换成十进制,作为行数
- 取每组数据中间的四位,转换成十进制,作为列数
- 根据行号和列号找到对应的十进制数据
- 把该数据转换成二进制输出(4位)
- 表中的行号和列号都是从0开始计数
P盒运算
S盒压缩输出得到 32 位数据,经过P盒置换运算
轮结构变换F函数
- 最后一轮完成后,还要再进行一次左右交换,变为
解密
DES的加密和解密,不管从流程图上还是代码上,几乎完全一致。只不过加密输入的是明文和**(K1 - K16),解密输入的是密文和**(K16 - K1)