返回介绍

2.4 AES

发布于 2024-09-08 15:42:05 字数 2578 浏览 0 评论 0 收藏 0

1、工作原理

AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。

AES 是一个迭代的、对称密钥分组的密码,它可以使用 128、192 和 256 位密钥,并且用 128 位(16 字节) 分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入 数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

2、加密步骤

AES 加密主要是几个步骤

1. key 变换

将传入的明文 key 做变换,AES 的 key 固定为 128bit,但变换后的 key 为加密位数的一倍,128bit 的加密变换后 key 为 256bit。注意加密和解密的 key 变换不一样。

2. 加密解密

选择加密的模式和补齐填充方法生成加密实例,加密得到密文。

3. 密码块工作模式

块密码工作模式(Block cipher mode of operation),是对于按块处理密码的加密方式的一种扩充,不仅仅适用于 AES,包括 DES, RSA 等加密方法同样适用。

表格 2 AES 密码块工作模式

名称英文全名方法优点缺点
ECBElectronic codebook电子密码本每块独立加密1.分块可以并行处理1.同样的原文得到相同的密文,容易被攻击
CBCCipher-block chaining密码分组链接每块加密依赖于前一块的密文1.同样的原文得到不同的密文 2.原文微小改动影响后面全部密文1.加密需要串行处理 2.误差传递
PCBCPropagating cipher-block chaining填充密码块链接CBC 的扩种,较少使用1.同样的原文得到不同的密文 2.互换两个邻接的密文块不会对后续块的解密造成影响1.加密需要串行处理
CFBCipher feedback密文反馈   
OFBOutput feedback输出反馈模式加密后密文与原文异或 XOR 1.能够对密文进行校验
CTRCounter mode计数器模式增加一个序列函数对所有密文快做 XOR  

备注:Java 标准库 javax.crypto AES 加密模式缺省是 AES/ECB/NoPadding

4). 填充

填充(Padding),是对需要按块处理的数据,当数据长度不符合块处理需求时,按照一定方法填充满块长的一种规则。

表格 3 AES 填充方式

名称方法示例
Zero padding最常见的方式,全填充 0x00AA AA AA AA 00 00 00 00
ANSI X.923Zero 的改进,最后一个字节为填充字节个数AA AA AA AA 00 00 00 04
ISO 10126随机填充AA AA AA AA 81 A6 23 04
PKCS7ANSI X.923 的变体 填充 1 个字符就全 0x01 填充 2 个字符就全 0x02 不需要填充就增加一个块,填充块长度,块长为 8 就填充 0x08,块长为 16 就填充 0x10AA AA AA AA AA AA AA 01 AA AA AA AA 04 04 04 04 AA AA AA AA AA AA AA AA 08 08 08 08 08 08 08 08
ISO/IEC 7816-4以 0x80 开始作为填充开始标记,后续全填充 0x00AA AA AA AA AA AA AA 80 AA AA AA AA 80 00 00 00

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文