网站首页 > 技术文章 正文
AES(Advanced Encryption Standard)高级加密标准,又称Rijndael加密法,是一种对称密钥加密算法,是NIST在2002年发布的一种分组加密标准,用来取代DES。目前是对称加密算法中最流行的算法之一,。
AES的分组长度固定为128位,支持不同长度的密钥,包括128位、192位和256位,不同长度的密钥加解密的轮数会适当增加。在通信时双方用同一个密钥,并不对外公开。
AES加密的原理
- 密钥,需要通信的双方提前约定同一个密钥。密钥长度越长,计算复杂度越大,破解难度越大。
- 分组的填充,对明文进行分组加密,最后拼接起来。分组大小为128位(16字节),不够128位时,需要对明文块进行填充,填充模式有PKCS5Padding(固定数值)、ISO10126Padding(随机数)等等。
- 分组的模式(Modes of Operation),大于128位的明文,为了增强安全性,可以用多种模式进行分组和增强,常见模式有ECB、CBC、CFB、OFB、CTR。
- 使用SPN结构(Substitution-Permutation Network,代换-置换网络),并通过交错的若干“轮”代换操作和置换操作产生密文块。
- 不同的密钥不同的加密计算轮数,128位密钥使用10轮,192位密钥使用12轮,256位密钥使用14轮。
AES加密的步骤
以AES-128为例来详细分析加密的步骤,也就是密钥的长度为128位,加密轮数为10轮。
大的步骤如下:
- 明文填充,按指定的填充模式,将明文填充至128位的倍数。
- 密钥扩展,将128位的密钥扩展成11个128位的子密钥来用于接下来的轮密钥加操作。
- 明文分组,按指定的分组的模式进行分组,每组128位。
- 多轮加密,涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey),其中首轮和最终轮操作与其他轮不同。
- 密文合并,将多组密文合并为最终密文。
上述的密钥扩展(11个子密钥)的步骤如下:
- 将初始密钥以4*4字节矩阵(上到下、从左到右进行排列)表示,以列取4个32位的字节,分别记为W[0],W[1],W[2],W[3],做1个初始子密码。
- 通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1], … ,W[43]。
- 后面40个字分为10组,每组4个字节,再形成10个子密钥。
密钥编排函数主要操作是,移位,S盒置换,和RC常量(一维数组)异或。
上述的多轮加密的步骤如下:
- 初始轮计算,16位明文与16位密钥进行一次轮密钥加,即与初始子密钥进行异或。
- 再进行N-1轮4个不同的变换计算,字节替代、行移位、列混淆和轮密钥加。
- 最终轮计算,进行3个不同的变换计算,字节替代、行移位和轮密钥加。得到16位的密文。
加密算法的核心4种操作如下:
- 字节替代(SubBytes),用一个S盒完成明文的字节到字节的代替。
- 行移位(ShiftRows),将明文作为一个 4 * 4 的字节矩阵,2到4行分别向左旋转移动1、2、3位。
- 列混淆(MixColumns),对每列数据进行线性变换。它是主要的扩散元素,它混淆了输入矩阵的每一列,使输入的每个字节都会影响到 4 个输出字节。
- 轮密钥加(AddRoundKey),明文和扩展子密钥按位异或。首轮使用了初始子密钥,其他轮依次使用其他N个扩展子密钥。
解密
解密的基本的数学原理是:一个数进行两次异或运算就能恢复。
所以解密过程就是加密的逆过程,其中轮计算是逆向进行,核心4种操作中也是相反方向进行:行移位向右旋转移动、列混淆用逆矩阵进行恢复。
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)