一、AES 概述
二、AES 加密算法的特点
AES加密的数据块长度为128(16字节),长度不足需要填充。密码长度可以为16,24,32字节。
三、秘钥类型
AES加密按秘钥的长度分为128位(比特)、192位和256位,一般记为AES-128、AES-192和AES-256。一般简短数据采用AES-128,也就是秘钥是16字节,少部分采用AES-256。
四、填充方式
待加密的明文以16字节分组进行加密,如果数据字节长度不是16的倍数,最后的一组则需要在有效数据后面进行填充,使得数据长度变为16字节。
AES填充方式分为NoPadding、PKCS5(PKCS7)、ISO10126、Zeros。
- NoPadding:不填充,那就只能加密长度为16倍数的数据,一般不使用
- Zeros:补0,如果原数据长度恰好是16的倍数,也要补16个0
- ISO10126: 最后一个字节是填充的字节数(包括最后一字节),其他全部填随机数
ISO10126
.
1 2 3 4 5 6 7 8 9 10 – x x x x x 6 //填充6个字节PKCS5(PKCS7):应用比较多,最后一组缺几个字节就填充几
1 2 3 4 5 6 7 8 9 10 – 6 6 6 6 6 6
前面10个字节,缺6字节才能为一组,填充6个6,如果恰好是16个字节,则填充16个16.
五、加密方式
加密方式分为五种:电码本模式(Electronic Codebook Book (ECB))、密码分组链接模式(Cipher Block Chaining (CBC))、计算器模式(Counter (CTR))、密码反馈模式(Cipher FeedBack (CFB))、输出反馈模式(Output FeedBack (OFB))。实际应用比较多的是ECB和CBC。
ECB:将明文按16字节分组,每组分别加密后拼接。
CBC:上面ECB缺点是明文内相同的明文块,最终的密文也是相同的,为了更好的隐藏明文信息,针对这个问题就有了CBC模式,每一小段明文先与初始块向量或者上一段的密文段进行异或运算后,再与密钥进行加密。