原始代码:
# 初始化秘钥
try {
KeyGenerator _generator = KeyGenerator.getInstance( "AES" );
_generator.init(128 , new SecureRandom(strKey.getBytes()));
return _generator.generateKey();
} catch (Exception e) {
throw new RuntimeException( " 初始化密钥出现异常 " );
}
问题描述:
Windows操作系统AES加解密正常,Linux系统加密正常,解密抛出如下异常:
javax.crypto.BadPaddingException: Given final block not properly padded
原因描述:
java.security.SecureRandom类在Windows系统中相同密码每次生成随机数都是相同的,然而在Linux系统中会生成不一致的情况。
解决方法:
try {
KeyGenerator _generator = KeyGenerator.getInstance( "AES" );
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(password.getBytes());
_generator .init(128, secureRandom);
return _generator.generateKey();
} catch (Exception e) {
throw new RuntimeException( " 初始化密钥出现异常 " );
}
指定秘钥生成规则即可解决不用操作系统AES解密的问题