AES(Advanced Encryption Standard)
即高级加密算法,由Rijndael
发明用于取代DES
算法,是对称密钥加密算法之一
其加密原理是将明文信息按照128bit作为一个分块进行AES加密,然后拼接成为一个字符串,剩下不足128Bit需要进行填充(OFB与CTR不需要)
AES有多种加密方式
- ECB(Electorinic CodeBook):既简单又快速,加密与解密均支持并行计算,但相同的128Bit块加密出来的数据是一致的,故不建议用于密码加密,无法应对重放攻击
- CBC(Cipher-Block-Chaining):明文的重复排列不会出现在密文中,解密时支持并行计算,可单独解密密文块,但包含错误比特的密文进行解密时第一个分组以及最后一个分组会出错,加密时不支持并行计算
- CFB(Cipher-FeedBack):无需填充,解密支持并行计算,可随意解密密文块,但包含错误比特的密文进行解密时第一个分组以及下一个分组会出错,加密时不支持并行计算
- OFB(Output-Feedback):无需填充,加密解密可提前预备(解密亦是用的加密手段),包含错误的比特密文时只会影响对应明文而不影响前后明文块,但主动攻击者可以修改部分密文达到修改明文的效果,不支持并行计算
- CTR(CounTeR):无需填充,加密解密可提前预备(解密亦是用的加密手段),包含错误的比特密文时只会影响对应明文而不影响前后明文块且支持并行计算,但主动攻击者可以修改部分密文达到修改明文的效果
AES也有多种填充方式
- NoPadding:不填充
- PKCS#7 & PKCS#5: 如数据缺少n个字节(n>0)则填充n个字节,如已对齐则填充一个长度大小为块,PKCS5是大小固定为8个字节,填充方式两者一致
- ZerosPadding: 无论缺多少的都填充0x00
- ISO 10126: 最后一个字节是填充的字节数,其他全部填入随机数
- ANSI X9.23:最后一个字节是填充的字节数,其他全部填入0
参考资料