图解DES、3DES和AES加密算法

图解DES、3DES和AES加密算法DES 是一种将 64bit 的明文加密成 64bit 的密文的对称加密算法

大家好,欢迎来到IT知识分享网。

一、DES

1. 加密和解密

DES是一种将64bit的明文加密成64bit的密文的对称加密算法。它的密钥长度是56bit。从规格上来讲,DES密钥长度是64bit,但是由于每隔7bit会设置一个用于校验检查的校验位,所以实质上密钥长度是56bit。64位的密钥都会被分成8个8位的块。其中,每个块的第7位都会被用作校验位,用于检验该块的其他7位中1的个数是否为奇数。如果不是奇数,那么校验位会被设置为1,否则为0。

这个校验位的目的是为了检查密钥的正确性和完整性,以确保在加密和解密过程中不会出现错误。如果密钥被篡改或者传输过程中发生了错误,那么校验位就会被检测出来,从而保证密钥的正确性和可靠性。

DES是以64bit的明文为一个单位来进行分组加密的,所以DES每次只能加密64bit的数据。如果需要加密很长的数据,就需要对DES加密进行迭代,而迭代的具体方式就称为模式ECBCBCCFBOFBCTR)。
DES加解密

2. DES的结构(Feistel网络)

DES的基本结构是由Horst Feistel设计的,因此也叫Feistel网络Feistel 结构 或者Feistel密码。很多密码算法中都用到这种结构。
在Feistel网络中,加密的各个步骤称之为,整个加密过程就是进行若干次轮的循环。DES 是一种16轮循环的Feistel网络。
Fesitel网络中的一轮
上图表示Fesitel网络中的一轮,根据上图讲解一下Fesitel网络的具体结构。


  1. 上面两个方框表示本轮要加密的64bit 明文,输入的数据会被分为左右两个部分分别处理。
  2. 下面两个方框表示本轮输出的左侧(密文)和右侧(明文
  3. 中间的子密钥指的是本轮加密所使用的密钥,在Fesitel网络中,每一轮都需要不同的子密钥。由于子密钥只是在一轮中使用,所以它是局部密钥,因此才被称为子密钥
  4. 轮函数 的作用是根据 右侧子密钥 生成对左侧进行加密的bit序列,它是密码系统的核心。将轮函数输出的bit序列左侧进行异或运算,其结果就是加密后的左侧
  5. 输入的右侧将直接输出

生成子密钥的过程如下:

  1. 首先,将64位的密钥通过一个称为初始置换(Initial Permutation)的置换表进行重排,得到一个56位的密钥,其中8位被用作校验位,不参与后续的计算。
  2. 然后,将这个56位的密钥分成左右两个28位的部分,分别称为C0和D0。
  3. 接下来,对C0和D0进行16轮的迭代,每轮迭代都包括以下步骤:
    a. 对Cn和Dn进行左移操作,得到Cn+1和Dn+1。左移操作将Cn和Dn的位数分别向左移动1或2位,具体的移动次数由轮数决定。
    b. 将Cn+1和Dn+1合并成一个56位的密钥Kn+1,通过一个称为压缩置换(Compression Permutation)的置换表进行重排,得到一个48位的子密钥Kn。
    c. 将生成的子密钥Kn存储起来,作为加密和解密时使用的密钥。


  4. 最后,经过16轮迭代之后,就生成了16个48位的子密钥,这些子密钥被用于加密和解密数据。

二、3DES

1. 3DES加密

3DES也是三重DES,是为了增加DES的强度,将DES重复3次所得到的一种加密算法。

3DES
由于DES密钥长度实质上是56bit,此三重DES的密钥长度就是3*56=168 bit。
上图我们可以发现,三重DES并不是进行三次DES加密(加密 -> 加密 -> 加密),而是加密-解密-加密的过程。为什么加密算法中要加入解密算法呢?其目的是为了让3DES兼容普通的DES
三重DES中所有密钥都相同时,三重DES就等于普通的DES了。因为前两次加密-解密得到的就是最初的明文,然后在进行一次DES加密,就相当于只做了一次DES加密。因此以前用DES加密的密文,也能用3DES来进行解密。
3des=des
如果密钥1和密钥3相同,密钥2使用不同的密钥,这种三重DES就称为 DES_EDE2,如下图:




在这里插入图片描述

2. 3DES解密

三、AES

AES也是分段加密的,它是取代DES而成为新标准的一种对称密码算法。

1. AES最终候选算法和算法确定

AES最终候选算法名单

名称 提交者
MARS IBM公司
RC6 RSA公司
Rijndael Daemen、Rijmen
Serpent Anderson、Biham、Knudsen
Twofish Coumterpane公司

最终Rijndael,被NIST选定为AES标准

2. Rijndael
2.1 什么是Rijndael

Rijndael的分组长度密钥长度可以分别以32bit为单位在128bit~256bit范围内进行选择,不过在AES的规格中,分组长度固定为128bit,密钥长度只有128、192和256bit 三种。

2.2 Rijndael的加密和解密

DES一样,Rijndael算法也是由多个构成,其中每一轮分别为SubBytes(逐字节替换)ShiftRows(平移行)MixColumns(混合列)AddRoundKey(与轮密钥异或) 共4个步骤。

3. AES密钥生成

上面讲了明文加密过程,现在讲一下AES密钥生成过程.

128位密钥也是用字节为单位的矩阵表示,矩阵的每一列被称为1个32位比特字。通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1], … W[42],W[43],该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥,用于加密运算中的初始轮AddRoundKey。后面40个字分为10组,每组4个字(128比特)分别用于10轮加密运算中的AddRoundKey,如下图所示:
preview

图片来源:密码学基础:AES加密算法

4. AES算法流程图

请添加图片描述
每一轮加密中,都会依次执行SubBytes、ShiftRows、MixColumns和AddRoundKey四个操作,其中AddRoundKey操作在第一轮加密是唯一的操作。在最后一轮加密中,没有MixColumns操作,只有SubBytes、ShiftRows和AddRoundKey操作。

因此,总的来说,AES加密算法的轮数为11轮(10轮加密和1轮初始轮)或13轮(12轮加密和1轮初始轮)或15轮(14轮加密和1轮初始轮),具体取决于所使用的密钥长度。

参考博客:The Design of Rijndael、密码学基础:AES加密算法、AES加密算法的详细介绍与实现

参考书籍:《图解加解密技术》

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114304.html

(0)
上一篇 2025-12-09 15:00
下一篇 2025-12-09 15:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信