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

参考文献