赞
踩
为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。
全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977 年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来
DES 密钥为 8 个字节共64位,有效密钥长度为 56 位,每隔 7 比特会设置一个错误校验位,即每个字节第 8 位为奇偶校验位,不参与加解密运算,因此第 8 位不相同的两个密钥对同一串明文数据进行加密后得到的结果是相同的。
2DES 指的是密钥长度为 16 个字节,是原来单 DES 的两倍。
也称为Triple DES,是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
三重 DES 是使用 DES 进行“加密→解密→加密”这样的过程,可以表示为 EDE(Encryption→Decryption→Encryption)。目的是为了使三重 DES 能够兼容普通的 DES,当三次 DES 加密使用的密钥相同时,三重 DES 就等同于普通的 DES。
加密、解密和加密这三个过程使用不同的密钥,这样的三重 DES 称为 DES-EDE3。三重 DES 的解密过程也是和加密正好相反,按照密钥 3、密钥 2、密钥1 的顺序分别执行 “解密→加密→解密” 这样的顺序进行操作。三重 DES 的处理速度不高,效率较低。
key: 8 个字节共 64 位的工作密钥(2DES,3DES 秘钥长度扩展为 16 字节,24 字节);
data: 8 个字节共 64 位的需要被加密或被解密的数据;
mode: DES 工作方式,加密或者解密。
DES 是一种分组加密算法。分组加密算法指的是 DES 每次只能对固定 8 个字节(64位)的数据进行加密或者解密;若数据长度超过 8 个字节,则需要分组,每 8 个字节为一组,不足 8 个字节的需要填充 8 个字节(进行补位)。
电子密码本模式(Electronic codebook)是最简单的块密码加密模式,加密前根据加密块大小(DES 为 64 位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。
ECB 模式由于每块数据的加密是独立的因此加密和解密,故可以并行计算;
而 ECB 模式最大的缺点是相同的明文块会被加密成相同的密文块,在某些环境下不能提供严格的数据保密性。
数据参考,hex 格式
明文:
49906f82d1de4320e4096a816579cdad
秘钥:
43b88066cf30007e
密文:
336674a0cdfc74153a78f930e4e22712
CBC (Cipher Block Chaining)模式对于每个待加密的密码块在加密前会先与前一个密码块的密文进行异或,然后再用加密器加密。第一个明文块与一个叫初始化向量( initialization vector)的数据块异或。
CBC 模式相比 ECB 有更高的保密性,然而由于对每个数据块的加密依赖与前一个数据块的加密,加密过程无法并行。与 ECB 一样在加密前需要对数据进行填充,不是很适合对流数据进行加密。
常用的模式为 ECB 和 CBC ,对于 CFB ,OFB 等此处不再介绍。
数据参考,hex 格式
明文:
9e04f099dcef0e375b4e32c940c3f408
秘钥:
9b970c594cf8df52
IV:
f51baf08b595f304
密文:
e9abb65d1b14bd4383460b87a3c0d7c9
数据长度不对齐时使用 0 填充,否则不填充。
eg:
... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |
如果数据长度需要填充 n(n>0) 个字节才对齐,那么填充 n 个字节,每个字节数值为 n;如果数据本身已经对齐,则填充一块长度为块大小的数据,每个字节都是块大小。
... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |
块大小固定为 8 字节,为 PKCS7Padding 的子集。
加密: 数据字节长度对 8 取余,余数为 m,若 m>0,则补足 8-m 个字节,字节数值为 8-m,即差几个字节就补几个字节,字节数值即为补充的字节数,若为 0 则补充 8 个字节的 8 ;
解密: 取最后一个字节,值为 m,则从数据尾部删除 m 个字节,剩余数据即为加密前的原文。
在 Feistel 网络中,加密的各个步骤称为轮 (round),整个加密过程就是若干次轮的循环。DES 是一种 16 轮循环的 Feistel 网络。
如上图,输入 64 bit 的明文,会被左右两部分,每部分都是 32 bit。右侧直接向下,成为输出的一部分。同时,右侧部分与子密钥输入轮函数,轮函数的输出再与左侧部分进行异或,异或后的结果,即为加密后的左侧,左侧输出与右侧输出结合起来,就是经过一轮后的输出。在 Feistel 网络的每一轮中,都需要使用不同的子密钥。这一轮加密的核心是轮函数。
每轮的操作步骤如下:
(1) 将输入的 64 位分为左右两个 32 位;
(2) 将输入右侧的 32 位直接向下落到输出的右侧 32 位;
(3)将输入右侧作为轮函数的入参输入;
(4)轮函数根据输入右侧的 32 位和 子密钥两个入参,生成一串看上去随机的比特序列输出;
(5)将轮函数的输出和输入左侧 32 位进行异或运算,结果向下落到输出的左侧 32 位。
在 Feistel 网络中,每完成一轮,就会将左右两侧进行对调,然后使用不同的子密钥再继续进行一轮的运算,如此循环往复,经过多轮循环后,就得到最后的加密结果。DES 就是经过 16 轮循环的 Feistel 结构加密算法。
解密步骤和加密步骤完全相同的,只不过子密钥的顺序是逆序的。因为要和之前加密的顺序配合在一起。假设是 n 轮网络,子密钥 1 - n,要想还原成明文,异或的顺序要逆序反过来,这样才能利用 a ⊕ a = 0,异或的结合律,还原明文。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。