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

参考文献