图解DES、3DES和AES加密算法 |
您所在的位置:网站首页 › 对称加密图解 › 图解DES、3DES和AES加密算法 |
文章目录
一、DES1. 加密和解密2. DES的结构(Feistel网络)
二、3DES1. 3DES加密2. 3DES解密
三、AES1. AES最终候选算法和算法确定2. Rijndael2.1 什么是Rijndael2.2 Rijndael的加密和解密
3. AES密钥生成4. AES算法流程图
一、DES
1. 加密和解密
DES是一种将64bit的明文加密成64bit的密文的对称加密算法。它的密钥长度是56bit。从规格上来讲,DES密钥长度是64bit,但是由于每隔7bit会设置一个用于校验检查的校验位,所以实质上密钥长度是56bit。64位的密钥都会被分成8个8位的块。其中,每个块的第7位都会被用作校验位,用于检验该块的其他7位中1的个数是否为奇数。如果不是奇数,那么校验位会被设置为1,否则为0。 这个校验位的目的是为了检查密钥的正确性和完整性,以确保在加密和解密过程中不会出现错误。如果密钥被篡改或者传输过程中发生了错误,那么校验位就会被检测出来,从而保证密钥的正确性和可靠性。 DES是以64bit的明文为一个单位来进行分组加密的,所以DES每次只能加密64bit的数据。如果需要加密很长的数据,就需要对DES加密进行迭代,而迭代的具体方式就称为模式(ECB、CBC、CFB、OFB、CTR)。 DES的基本结构是由Horst Feistel设计的,因此也叫Feistel网络、Feistel 结构 或者Feistel密码。很多密码算法中都用到这种结构。 在Feistel网络中,加密的各个步骤称之为轮,整个加密过程就是进行若干次轮的循环。DES 是一种16轮循环的Feistel网络。 生成子密钥的过程如下: 首先,将64位的密钥通过一个称为初始置换(Initial Permutation)的置换表进行重排,得到一个56位的密钥,其中8位被用作校验位,不参与后续的计算。然后,将这个56位的密钥分成左右两个28位的部分,分别称为C0和D0。接下来,对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存储起来,作为加密和解密时使用的密钥。最后,经过16轮迭代之后,就生成了16个48位的子密钥,这些子密钥被用于加密和解密数据。如果只看上面,我们的右侧是没有被加密的,所以我们才需要用不同的子密钥进行多次的轮操作,并且每两轮直接左右需要对调。如下图: 3DES也是三重DES,是为了增加DES的强度,将DES重复3次所得到的一种加密算法。
三重DES解密过程和加密过程正好相反,以密钥3-密钥2-密钥1的顺序执行解密-加密-解密的操作 AES也是分段加密的,它是取代DES而成为新标准的一种对称密码算法。 1. AES最终候选算法和算法确定AES最终候选算法名单 名称提交者MARSIBM公司RC6RSA公司RijndaelDaemen、RijmenSerpentAnderson、Biham、KnudsenTwofishCoumterpane公司最终Rijndael,被NIST选定为AES标准 2. Rijndael 2.1 什么是RijndaelRijndael的分组长度和密钥长度可以分别以32bit为单位在128bit~256bit范围内进行选择,不过在AES的规格中,分组长度固定为128bit,密钥长度只有128、192和256bit 三种。 2.2 Rijndael的加密和解密和DES一样,Rijndael算法也是由多个轮构成,其中每一轮分别为SubBytes(逐字节替换)、ShiftRows(平移行)、MixColumns(混合列) 和 AddRoundKey(与轮密钥异或) 共4个步骤。 Rijndael输入分组为128bit,也就是16字节。输入的明文和密钥都是由16个字节组成的数据,它是按照字节的先后顺序从上到下、从左到右进行排列的。 上面讲了明文加密过程,现在讲一下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,如下图所示: 图片来源:密码学基础:AES加密算法 4. AES算法流程图
因此,总的来说,AES加密算法的轮数为11轮(10轮加密和1轮初始轮)或13轮(12轮加密和1轮初始轮)或15轮(14轮加密和1轮初始轮),具体取决于所使用的密钥长度。 AES解密过程就是一个逆过程,但是整体流程还是一样的。先进行AddRoundKey,在进行轮函数。但是解密中轮函数执行顺序是AddRoundKey、InvMixColumns、InvShiftRows、InvSubBytes 其中,AddRoundKey是与轮密钥进行XOR运算,这一步加密和解密是一样的。剩下的步骤方法前面都带有Inv,这表示的是与加密相对应的逆运算。 参考博客:The Design of Rijndael、密码学基础:AES加密算法、AES加密算法的详细介绍与实现 参考书籍:《图解加解密技术》 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |