AES加密中,将数据以Block Size(16byte)为一组 按组解密,不足16byte需要补足(填充模式)
有三种方案
AES-128、AES-192、AES-256,它们的区别在于密钥长度不同,
AES-128的密钥长度为16bytes(128bit / 8),后两者分别为24bytes和32bytes。密钥越长,安全强度越高,但伴随运算轮数的增加,带来的运算开销就会更大,所以用户应根据不同应用场合进行合理选择。密钥长度不足,末尾加0
有五种加密模式
CBC、ECB、CTR、OCF、CFB,后三种模式因其较为复杂且应用较少,仅对ECB和CBC模式最常用且容易,使用除ECB以外的其他加密模式均需要传入一个初始向量IV,其大小与Block Size(16byte)相等.
有多种填充模式
NoPadding,PKCS5Padding,PaddingMode.Zeros,PaddingMode.PKCS7 等
PKCS7Padding跟PKCS5Padding的区别就在于数据填充方式,PKCS7Padding是缺几个字节就补几个字节的0,而PKCS5Padding是缺几个字节就补充几个字节的几,好比缺6个字节,就补充6个字节的6。
以上根据自己的需要自由组合
https://www.jianshu.com/p/45848dd484a9
java 是否支持 AES256
echo $JAVA_HOME
// 查看支持的最大密钥长度
int i = Cipher.getMaxAllowedKeyLength("AES/CBC/PKCS7Padding");
1.java 8 161以上已经不再限制密钥长度 所以 i=2147483647
2.java 8 151以上,需要修改security文件(${java_home}/jre/lib/security),修改配置,重启jvm
3.java 8 151之前的,需要替换jar,重启jvm