网站首页 > 技术文章 正文
AES加密前准备
1. 需加密的16字节数据
只能是16字节,不足16字节会有相应的补位方法。超过16字节那就拆分成N块16字节,每块分别加密。
2.16字节密钥
AES完整流程
AES加密第一步:密轮钥加
先把要加密的明文16字节数据排列成4x4矩阵
再把16字节密钥也排列成4x4矩阵
然后两个4x4矩阵相加(每个字节相异或),这样就完成了轮密钥加,记住这个步骤,并把这个步骤编成模块,后面还要用。
加密第二步:字节代替
字节代替也叫做S盒变换 AES有个固定的S盒,下图即为S盒
把第一步轮密钥加后产生的每一个字节用十六进制表示 然后以十六进制的第一个数字为行,第二个数字为列,在S盒表中查找对应的数字,用这个数字来代替原先的数字,这样就完成了字节变换。(比如原字节为0x1a,就以1为行,a为列,找到表中对应的0xa2来代替0x1a的位置)
加密第三步:行移位
就是把上一步得到的矩阵每行左环移,第一行不变,第二行环移1位,第三行环移2位,第三行环移3位。
加密第四步:列混淆
将上一步得到的矩阵a左乘矩阵c,得到新的矩阵b。这里的矩阵c是固定的,如下,应该是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)
加密第五步:再来一遍轮密钥加
步骤还是第一步那个步骤,把上一步产生的4x4矩阵与4x4密钥相加,但是这里要加的密钥不再是那个原始密钥了,新的密钥要通过那个原始密钥计算产生,下面讲一下计算方法。
用原始密钥生成扩展密钥的方法如下图所示
这里的K矩阵就是原始密钥,把每一列用4维向量w来表示,就拆分成了w0,w1,w2,w3,将w3进行g中的运算,先是把4个字节左环移,然后对这4个字节进行S盒变换,S盒变换在上面已经介绍过了,变换完后,最左面的字节与RCj相加,AES128加密要把以上步骤进行10轮,RCj在每一轮的计算中都不一样,具体如下
这里我们进行第一轮,就把RCj取01,相加完成后,将得到的w'与w0相加,产生w4,将w4与w1相加产生w5,将w5与w2相加产生w6,将w6与w3相加产生w7,这样,新一轮的密钥诞生了,他就是w4,w5,w6,w7
将新密钥与第四步得到的数据相加,就完成了这一步的轮密钥加。
这个计算后面还要用,编写成模块等待调用。
加密第六步
将以上步骤重复10轮,即可得到密文。
注意最后一轮不要再列混淆了,最后得到的结果就是16字节的密文。
猜你喜欢
- 2025-05-24 网络信息安全之敏感信息在传输、显示时如何加密和脱敏处理
- 2025-05-24 常见加密方式及Python实现
- 2025-05-24 pdf怎么加密
- 2025-05-24 aes256 加密 解密 (python3) 「二」
- 2025-05-24 深入理解Python3密码学:详解PyCrypto库加密、解密与数字签名
- 2025-05-24 Springboot实现对配置文件中的明文密码加密
- 2025-05-24 JavaScript常规加密技术
- 2025-05-24 信息安全人人平等 谷歌推出低性能安卓手机加密技术
- 2025-05-24 SpringBoot与Jasypt整合,实现数据库字段自动加密解密功能
- 2025-05-24 安全性能爆表!Win10 TH2引入XTS-AES加密算法
你 发表评论:
欢迎- 05-24网络信息安全之敏感信息在传输、显示时如何加密和脱敏处理
- 05-24常见加密方式及Python实现
- 05-24pdf怎么加密
- 05-24aes256 加密 解密 (python3) 「二」
- 05-24深入理解Python3密码学:详解PyCrypto库加密、解密与数字签名
- 05-24Springboot实现对配置文件中的明文密码加密
- 05-24JavaScript常规加密技术
- 05-24信息安全人人平等 谷歌推出低性能安卓手机加密技术
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)