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进制数字转换为字符串后进行输出。