文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2.4 AES
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 密码块工作模式
名称 | 英文 | 全名 | 方法 | 优点 | 缺点 |
---|---|---|---|---|---|
ECB | Electronic codebook | 电子密码本 | 每块独立加密 | 1.分块可以并行处理 | 1.同样的原文得到相同的密文,容易被攻击 |
CBC | Cipher-block chaining | 密码分组链接 | 每块加密依赖于前一块的密文 | 1.同样的原文得到不同的密文 2.原文微小改动影响后面全部密文 | 1.加密需要串行处理 2.误差传递 |
PCBC | Propagating cipher-block chaining | 填充密码块链接 | CBC 的扩种,较少使用 | 1.同样的原文得到不同的密文 2.互换两个邻接的密文块不会对后续块的解密造成影响 | 1.加密需要串行处理 |
CFB | Cipher feedback | 密文反馈 | |||
OFB | Output feedback | 输出反馈模式 | 加密后密文与原文异或 XOR | 1.能够对密文进行校验 | |
CTR | Counter mode | 计数器模式 | 增加一个序列函数对所有密文快做 XOR |
备注:Java 标准库 javax.crypto AES 加密模式缺省是 AES/ECB/NoPadding
4). 填充
填充(Padding),是对需要按块处理的数据,当数据长度不符合块处理需求时,按照一定方法填充满块长的一种规则。
表格 3 AES 填充方式
名称 | 方法 | 示例 |
---|---|---|
Zero padding | 最常见的方式,全填充 0x00 | AA AA AA AA 00 00 00 00 |
ANSI X.923 | Zero 的改进,最后一个字节为填充字节个数 | AA AA AA AA 00 00 00 04 |
ISO 10126 | 随机填充 | AA AA AA AA 81 A6 23 04 |
PKCS7 | ANSI X.923 的变体 填充 1 个字符就全 0x01 填充 2 个字符就全 0x02 不需要填充就增加一个块,填充块长度,块长为 8 就填充 0x08,块长为 16 就填充 0x10 | AA 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 开始作为填充开始标记,后续全填充 0x00 | AA AA AA AA AA AA AA 80 AA AA AA AA 80 00 00 00 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论