DES算法

DES

  • Data Encryption Standard,数据加密标准
  • 分组加密算法
  • 56位的**加密64位明文
    • 64位的**每8位是一个奇偶校验位,只有56位有效**
    • 把明文拆成n个64位明文数据块

一般结构图

DES算法

初始(终止)置换

DES算法
将输入的58位换到第1位,输入的第50位放到第2位…

扩展置换

  • 经过 初始置换64 位数据被分为左右 32 位数据,其中右边的 32 位数据经过 扩展置换 变成 48 位数据
  • 其实就是在某些位置进行了填位操作

DES算法

**置换

  1. 输入 64 位**K0,根据PC-1进行置换得到 56
    DES算法
  2. 把得到的 56 位分成左右两半各 28
  3. 根据循环左移表,分别将左右两半进行左移,拼在一起得到新的 56
    DES算法
  4. 将新得到 56 位**根据PC-2置换表进行置换,得到 48 位** K1(DES第一轮的子**),一共要产生16个***,表示为 K1 到 K16
    DES算法

S盒压缩处理

  • 经过扩展的 48 位输入和 48 位**进行异或运算后,再使用 8 个S盒压缩处理得到 32 位数据
  • 实际上就是将 48 位输入分成 86 个元素,每块 6 位压缩为 4 位输出
    DES算法
  1. 取每组数据的第一位和最后一位,拼起来转换成十进制,作为行数
  2. 取每组数据中间的四位,转换成十进制,作为列数
  3. 根据行号和列号找到对应的十进制数据
  4. 把该数据转换成二进制输出(4位)
  5. 表中的行号和列号都是从0开始计数

P盒运算

S盒压缩输出得到 32 位数据,经过P盒置换运算
DES算法

轮结构变换F函数

DES算法

  • 最后一轮完成后,还要再进行一次左右交换,变为DES算法

解密

DES的加密和解密,不管从流程图上还是代码上,几乎完全一致。只不过加密输入的是明文和**(K1 - K16),解密输入的是密文和**(K16 - K1)