由于解密了DES加密算法,未解密3DES加密算法,但3DES算法加密解密效率低,目前都在使用AES算法。
AES加密算法是密码学中的高级加密标准,AES是分组加密法,将明文分成一个组,各组长度相等,加密数据集直到加密整个明文。 在AES标准中,分组的长度只有128比特,并且每个字节加密AES。 这意味着每个组可以有16个字节(密钥长度可以是128位、192位或256位)。 结果,密钥的长度不同,建议加密的循环数也不同。
AES算法思想:
1 )设计简单
2 )多平台速度快,代码紧凑
3 )抵抗所有已知攻击
4 )不采用Feistel结构,循环函数由非线性层、线性混合层、密钥相加层三种不同的可逆均匀变换组成。
明文p需要分组,如图所示,称为以字节为元素的矩阵数组表示的状态。
16字节的明文按此顺序排列,规则是从上到下,从左到右。
同样,密钥k也必须按照与明文p相同的原理进行分组。 下图是128位密钥矩阵。
下图为AES加密流程:
加密过程: c=e(k,p ),其中c为经加密的密文,k为密钥,p为明文,e为加密函数。
解码过程: p=d(k,p ),其中d是解码过程的逆运算。
AES的具体加密过程如下图所示。
AES加密过程通过字节替换、低移位、列模糊化和循环密钥相加四个步骤实现。
注意:密钥长度不同,加密的回合数也不同。 在第一个循环之前添加循环密钥,而在最后一个循环中不执行混淆列操作。
让我解释一下这四个步骤的具体含义:
字节替换:是非线性替换,其具体原理是用一个替换表(s盒)替换每个字节,实际上是查找表操作。 然后,该过程可逆地将各字节的前4位作为行值,将下4位作为列值,检索到s框并输出。
下图是s框(x表示行,y表示列),例如,字节为0x14时,前4位十六进制数为1,后4位十六进制数为4,查找s框第1行第4列的值,发现是0xfa,原始字节
解密过程与此相同,唯一采用的是倒s盒。
接下来是行位移操作
对于4*4矩阵,操作如下:
第0行:不动
第1行:循环左移1字节;
第二行:循环左移2个字节;
第三行:将循环左移3个字节。
解密过程循环右移,每行的移位字节数与加密过程相同。 下图是列移位的图像。
接下来是列混淆操作
实际上乘以44个矩阵和其他44个矩阵的异或,如下图所示,得到新的4*4的矩阵。
解码处理是重新计算与该矩阵的异或。 为什么这么说呢,因为通过两次异或运算得到的值就是原始数据本身。
最后轮密钥加号操作
循环密钥和状态矩阵进行逐位异或操作。
该循环密钥由种子密钥通过密钥组织算法得到,循环密钥长度与组长相同。
解密过程与此相同,进行两次异或运算得到原始数据。
密钥编排算法基本原则
1 )循环密钥的位数等于组长将循环数乘以1。
例如,加密128位明文需要总计(10(1) *128=1408位密钥。
2 )将种子密钥扩展为扩展密钥
3 )循环密钥取自扩展密钥,第一循环取扩展密钥的第0~3列,按顺序类推。
过程如下。
定义: w [0]到w [3]是初始键
如果如果i=4的倍数,即I是每个组的第一列,请执行以下三个步骤
1 )将w[i-1]循环左移1字节:
w [0] w [1] w [2] w [3] w [4] 2b 28 ab 09 cf7eaef 74 F4 f15 d 2154 f3c 16 a 6883 c09 w’[ I ]=w [ I-1 ]向左移动一个字节而获得。
w’[4]=w [3]左移一个字节={09,cf,4f,3c}字节左移={cf,4f,3c,09}
2 )对w’[ I ]的每个字节进行s盒替换,本质上是查询查找表,替换为另一个字节。
即,查表后为w’’[ I ]。
例如,w’[4]查表后的w’’[4]={ 8a,84,eb,01},需要s盒自检。
3 )将前两个步骤的结果与同圈常数Rcon[j]进行异或。 j表示轮数,Rcon[j]如下图所示
j 12345 rcon [ j ] 0100000002000004000000008000000000 rcon [ j ] 20000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
即w [4]=w [0]w’’[4]rcon [1],
那么w [8]=w [4]w’’[8]rcon [2],……
如果如果i4的倍数,即I是每个组的第2、3和4列,请执行以下操作
即w[i]=w[i-4]w[i-1]
例如w[5]=w[1]w[4],w[6]=w[2][5],……
的最终扩展键为{w[4]、w[5]、w[6]和w[7]。 随后的每个关键点都基于上一个倒圆角创建。
你可能不太明白你在说什么,我稍后补充。