聊聊 DES 算法
DES 简介
DES 全称叫(Data Encryption Standard),是1972年美国 IBM 公司研制的对称密码体制加密算法。DES 是由 Horst Feistel 设计的,因此也称作 Feistel 密码结构,在密码学研究中,Feistel 密码结构是用于分组密码中的一种对称结构。
DES 之前一直是世界上最常用的加密算法,在很长时间内,许多人心目中“密码生成”与 DES 一直是个同义词。但是随着计算机算力的进步,现在DES已经可以被暴力破解了,所以不再建议使用 DES 算法加密。
DES 加密解密
DES 密钥长 64bits,密钥事实上只有 56bits 参与 DES 运算,第 8、16、24、32、40、48、56、64 位是校验位(每隔 7 个比特), 使得每个密钥都有奇数个1。因为密钥长度是 64bits,所以只能将 64bits 的明文进行加密,所以如果明文长度大于 64bits,就需要进行分组,如果明文长度不是 64bits 的整数倍,在 DES 加密前,必须在尾部补充一些额外的比特。一旦密文被解密,这些多余的字节将被丢弃。当然,具体有多种补充的方法。
DES 加密
DES 解密
DES 工作原理
DES 加密
DES 是由 Horst Feistel 设计的,因此也称作 Feistel 网络。 Feistel 网络,加密的各个步骤称为轮(round),整个加密过程就是进行若干轮的循环。
下图展示了 DES 中的一轮加密过程:
由上图我们可以看到,在每一轮的操作中,输入的数据被分成左右两部分,中间的子密钥是指本轮加密所使用的密钥。在 Feistel 网络中,每一轮都使用不同的密钥,该密钥只是一个局部密钥,所以被称为子密钥。
其运算步骤如下:
1、将输入的数据分成左右两部分。
2、将输入的右边直接发送到输出的右边。
3、将输入的右边发送到轮函数 f。
4、轮函数根据右侧数据和子密钥计算出一个随机数。
5、将 步骤4 得到的随机数和左侧数据进行 XOR 运算,将运算后的结果作为加密的左侧。
我们可以看到这一轮操作,只加密了左侧数据,右侧的没有加密,然后我们可以交换左右两侧的数据,再来一轮加密。这样右侧的数据也被加密了。
DES 解密
在一次性密码本中,我们讲到了 XOR 的自反性,
a XOR b = c
c XOR b = a
按照这样的特性,我们只需要将加密后的结果跟 步骤4 中计算出来的随机数再做一次 XOR 运算即可还原加密前的数据。
解密过程如下图所示:
DES 特点
优点
1、Feistel 网络的轮数可以任意增加。
2、解密与轮函数 f 无关,轮函数f也不需要有逆函数。轮函数可以设计得足够复杂。
3、加密和解密可以使用完全相同的结构来实现。
缺点
1、分组比较短
2、密钥太短
3、密码生命周期短
4、运算速度较慢。
三重DES
随着硬件技术和 Internet 的发展,其破解的可能性越来越大,而且,所需要的时间越来越少。使用经过特殊设计的硬件并行处理只需要几个小时。
为了克服 DES 密钥空间小、容易被暴力破解的缺陷,人们又开发出了三重 DES 算法。
三重 DES 就是将 DES 的算法重复三次得到的一种密码算法。其加密机制如下:
由上图所示,3重 DES 的密钥长度是 3*64bits。并且是加密->解密->加密的过程。 在两个加密中加入了一个解密过程。这个是为了兼容普通的DES算法,如果将 3 个DES密钥保持一致,这样 3DES 算法就等于普通的 DES 算法了。