前言
最近上了信息安全课,学了一点东西,感觉还蛮有趣的,在这里记录一下,DES加密算法应该是IBM研制的一种被广泛使用的对称加密算法,在这里,我们只是讨论一下简化的DES算法。
DES算法流程

请允许我盗用一下老师的图片,这个流程图还是很清楚的,但是里面的具体什么置换,怎样去置换,就在简化的DES中去讲解。
整个加密过程分为3个阶段:
- 第一阶段进行初始置换IP,然后将明文分成两个32bit的字串——L0和R0
- 对于L0和R0进行连续的16轮迭代运算
- 将迭代后的信息进行逆置换,然后得到输出的密文。其中,逆置换是初始置换的逆运算
密钥的形成
对于一个给定的56bit密钥,在真正参与的加密的,其实只有48bit。
- 密钥在第一阶段时,进行置换选择PC-1,根据置换选择表,转换成新的密钥,并拆分成两部分——C0和D0
- 在第二阶段中,每次对密钥进行循环左移,然后进行置换选择PC-2,得到其中的48bit,但与到加密中。
初始置换
初始置换表如下:
1 | 58,50,42,34,26,18,10, 2,60,52,44,36,28,20,12, 4, |
就是把64bit数据的第58位放到第一位,第50位放到第二位,依次类推,最后得到一个新的64bit的数据
来个简化的样例
设原始8bit数据为: 1111 0011
IP表为:2,6,3,1,4,8,5,7
那么对应的转换后的数据为:1011 1101
迭代运算
对于每次迭代运算,都需要经过以下5个步骤:
- 扩展置换:将32bit的字串$RE_{i-1}$扩展成48bit的数据
- 异或操作:将上一步得到的48bit数据与密钥形成中得到的48bit数据进行异或操作
- 选择置换:将异或后得到的48bit数据重新变成32bit
- 置换操作:将上一步得到的结果进行置换
- 异或操作:将$LE_{i-1}$与上一步得到的数据进行亦或,得到$RE_i$,同时,$LE_i=RE_{i-1}$
具体流程图如下:

扩展置换
跟初始置换一样,根据对应的置换表格,进行置换
例如4bit -> 8bit置换表格为:4,1,2,3,2,1,4,3
对于输入数据:1011
输出数据为:1101 0111
与密钥异或
异或操作很简单,每一位对其,相同为0, 不同为1,不多解释了
选择置换
选择置换又称作S盒,是DES算法中唯一没有公开的一部分,只是给出了输入和输出,具体内部如何实现的,我们不知道。
简化的S盒如下所示:

在简化的DES算法中,我们使用两个S盒——S0和S1。
- 将8bit的数据平均分成两部分,前半部分使用S0, 后半部分使用S1
- 对于每一部分(以前半部分为例),设为D3,D2,D1,D0,将D3,D1组成一个二进制数,并转换成十进制数A1, 将D2, D1组成一个二进制数,并转换成十进制数A2
- 以A1指定一行,A2指定一列,对应的查找S0盒,得到数据M1,同理,用后半部分查找S1可以得到M2
- 将M1,M2合并成一个M,就得到了新的4bit的数据
例如,S盒如上图,对应的8bit输入数据为:1101 0111
前半部分: A1 = 11 -> 3 A2 = 10 -> 2 查表可得 M1 = 1 -> 01
后半部分:A1 = 01 -> 1 A2 = 11 -> 3 查表可得 M2 = 3 -> 11
所以转换后的数据为:0111
置换操作
跟初始置换差不多,不解释了
异或操作
应该很简单,也不多解释了
逆置换
逆置换是初始置换的逆过程,方法跟初始置换相同。
关于解密
DES算法是对称加密方法,对称加密的特点就是加解密过程相同,因此,方法跟加密完全一样,只需要将密文按同样的方法加密,就得到了明文。