5 分钟了解 AES 加密算法的细节参数
AES 是一种对称的 (即加密解密使用同一个密钥) 加密算法,关于 AES 加密算法的原理已经有很多文章进行过详细介绍,这里不再表述,主要说说在日常使用 AES 加密算法的过程中,参数如何选择的问题。
密钥长度
AES 加密算法是一种分块加密的算法,即将明文数据分割成一个个小块单独加密,AES 分割每个块的长度为 128 位。
算法 | 分块长度 (位) | 密钥长度 (位) | 加密轮数 |
---|---|---|---|
AES-128 | 128 | 128 | 10 |
AES-192 | 128 | 192 | 12 |
AES-256 | 128 | 256 | 14 |
块加密算法
- ECB (Electronic Codebook,电子密码本) 算法:
- 概括:将每个明文块使用相同的密钥分别加密
- 优点:简单快速,支持并行计算
- 缺点:若两个明文块相同则加密后对应的密文块也相同,存在安全隐患
- CBC (Cipher Block Chaining,密码块链接) 算法:
- 概括:每个明文块先和上一个密文块异或后在使用密钥加密,第一个密文块和 IV (Initialization Vector,初始化向量) 进行异或操作
- 优点:解决 CBC 算法的缺点
- 缺点:加密时无法并行操作,必须等待上一个密文块加密完成才能计算下一个密文块;解密时若其中某一位发生改变,只会影响对应的密文块及下一个密文块,无法保证整体的正确性
- CFB (Cipher Feedback,密文反馈) 算法:
- 概括:与 CBC 算法几乎相同,先将上一个密文块加密后再与明文块进行异或操作
- OFB (Output Feedback,输出反馈) 算法:
- 概括:将密钥生成为密钥流,使用密钥流对每个明文块进行异或操作
- 优点:加密与解密的算法完全相同
- 缺点:不支持并行计算
- CTR (Counter Mode,计数器模式) 算法:
- 概括:与 OFB 算法类似,不同之处在于密钥流根据密钥、IV 和一个计数器生成,可以预先知道用于各个分块的密钥段,目前被广泛使用
- 优点:支持并行计算
- CCM (CBC-MAC/CTR Mode) 算法:
- 概括:一种能够同时提供身份验证和加密的算法,广泛用于 Wi-FI 网络中的 WPA 认证模式 (即 CCMP 模式)
- GCM (GMalois/Counter Mode,GMAC+CTR) 算法:
- 概括:在 CTR 算法的基础上,还将每个密文组与一个 Authentication 消息进行异或操作得到 MAC 值,用于正确性计算
- 优点:可以保证数据的完整性与正确性
填充算法
若最后一个分块的大小不足 128 位,在使用某些加密算法的情况下,必须填充 (Padding) 至 128 位。
块加密算法 | |
---|---|
必须填充 | ECB/CBC |
不填充 | CFB/OFB/CTR/GCM |
填充算法:
填充算法 | 概述 |
---|---|
No Padding | 不进行填充 |
PKCS7 Padding | 每个字节均填充为缺少的字节个数 |
Zeros Padding | 全部填充为 0 |
ANSIX923 Padding | 最后一个字节 (含) 为填充的字节个数,其他全部填充为 0 |
ISO10126 Padding | 最后一个字节 (含) 为填充的字节个数,其他填充为随机数 |
输出格式
加密后的文本为字节流,一般考虑使用 Base64 编码后进行输出或将每个字节作为 16 进制数字转换为字符串后进行输出。
预览: