安全算法——AES加密流程

安全算法——AES加密流程AES 加密前准备 1 需加密的 16 字节数据只能是 16 字节 不足 16 字节会有相应的补位方法 超过 16 字节那就拆分成 N 块 16 字节 每块分别加密 2

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

安全算法——AES加密流程

AES加密前准备

1. 需加密的16字节数据

只能是16字节,不足16字节会有相应的补位方法。超过16字节那就拆分成N块16字节,每块分别加密。

2.16字节密钥

AES完整流程

安全算法——AES加密流程

AES加密第一步:密轮钥加

先把要加密的明文16字节数据排列成4×4矩阵

安全算法——AES加密流程

再把16字节密钥也排列成4×4矩阵

安全算法——AES加密流程

然后两个4×4矩阵相加(每个字节相异或),这样就完成了轮密钥加,记住这个步骤,并把这个步骤编成模块,后面还要用。

安全算法——AES加密流程

加密第二步:字节代替

字节代替也叫做S盒变换 AES有个固定的S盒,下图即为S盒

安全算法——AES加密流程

把第一步轮密钥加后产生的每一个字节用十六进制表示 然后以十六进制的第一个数字为行,第二个数字为列,在S盒表中查找对应的数字,用这个数字来代替原先的数字,这样就完成了字节变换。(比如原字节为0x1a,就以1为行,a为列,找到表中对应的0xa2来代替0x1a的位置)

加密第三步:行移位

就是把上一步得到的矩阵每行左环移,第一行不变,第二行环移1位,第三行环移2位,第三行环移3位。

安全算法——AES加密流程

加密第四步:列混淆

安全算法——AES加密流程

将上一步得到的矩阵a左乘矩阵c,得到新的矩阵b。这里的矩阵c是固定的,如下,应该是AES标准规定的。

安全算法——AES加密流程

注意这个乘法不是通常的10进制乘法,观察这个矩阵,里面有三种数字1,2,3,假如一个数y左乘他们其中一个,下面分三种情况介绍:

· 1*y = y

· 2*y 时,如果 y 的首位为0,则 2*y = y << 2 , 如果 y 的首位为1,则 2*y = ( (y<<1) & ( (1<<8) – 1) ) ^ (0x1b)

· 3*y = (2*y) ^ y

(2*y 的计算方法在上面已经讲了,这里再异或一下 y 就行)

其他情况的数以此类推,都把乘数拆分成1,2,3的积或和形式再用乘法分配律,比如 9*y = (2*2*2 + 1)*y = (2*2*2*y) ^ (1*y)

加密第五步:再来一遍轮密钥加

步骤还是第一步那个步骤,把上一步产生的4×4矩阵与4×4密钥相加,但是这里要加的密钥不再是那个原始密钥了,新的密钥要通过那个原始密钥计算产生,下面讲一下计算方法。

用原始密钥生成扩展密钥的方法如下图所示

安全算法——AES加密流程

这里的K矩阵就是原始密钥,把每一列用4维向量w来表示,就拆分成了w0,w1,w2,w3,将w3进行g中的运算,先是把4个字节左环移,然后对这4个字节进行S盒变换,S盒变换在上面已经介绍过了,变换完后,最左面的字节与RCj相加,AES128加密要把以上步骤进行10轮,RCj在每一轮的计算中都不一样,具体如下

安全算法——AES加密流程

这里我们进行第一轮,就把RCj取01,相加完成后,将得到的w’与w0相加,产生w4,将w4与w1相加产生w5,将w5与w2相加产生w6,将w6与w3相加产生w7,这样,新一轮的密钥诞生了,他就是w4,w5,w6,w7

将新密钥与第四步得到的数据相加,就完成了这一步的轮密钥加。

这个计算后面还要用,编写成模块等待调用。

加密第六步

将以上步骤重复10轮,即可得到密文。

注意最后一轮不要再列混淆了,最后得到的结果就是16字节的密文。

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

(0)

相关推荐

发表回复

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

关注微信