算法概述
DES算法是一种对称加密算法,基于56位密钥(事实上密钥形式上是64位的,但是有8位是奇偶校验位,剩下的56位才是真正的密钥)。其加密和解密的过程具有一致性。DES是一种典型的快密码,将固定长度(64位分组)的明文经过置换、函数变换等一系列复杂的操作变成同样长度(64位分组)的密文。(明文和密文包括密钥都是由0和1组成的信息)
总体结构
模块分解
根据总体结构,我们可以分为以下几个模块:
- IP置换模块
- 16轮T迭代模块
- Feistel函数模块
- 密钥生成模块
- IP逆置换模块
模块分析
IP置换模块
根据DES算法给出的IP置换表,我们可以算出新的序列:
置换表给出的是新的序列的元素对应的原来的序列中的下标位置。
64位的数据进行置换操作,有 64! 种可能的排列,但此处规定是以上的这种排列。
经此操作后,64位的明文M变为:
M0=IPPermutation(M)
密码生成模块
首先,因为原始的64位密钥中包含了8位的奇偶校验位,奇偶校验位均在被8整除的下标中,剩下的56位才是真正的密钥。
根据PC-1置换表对密钥进行置换,得 k0 :
k0=PC1(k′)将置换后得到的序列左右平分成 C0 和 D0 两段,每段28位。
- i=1,2,9,16时循环左移一个位置,其余时候左移两个位置
- 循环移位后得到 C1 , D1
- 再对 C1 和 D1 进行PC-2置换,就得到 k1 (PC-2的作用是把56位的秘钥压缩成48位)
- 再对 C1 和 D1 重复 C0 和 D0 的操作,一直到算出 k16 为止
###Feistel函数模块
Feistel(Ri−1,