Given final block not properly padded异常解决方案
温馨提示:
本文最后更新于 2018年02月01日,已超过 2,478 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
JAVA的AES加密解密在windows上测试一切正常,部署到linux之后总是报异常:
javax.crypto.BadPaddingException: Given final block not properly padded...
查阅资料得知,该问题是由以下原因引起的:
private static SecretKeySpec getSecretKey(final String password) throws NoSuchAlgorithmException {
//返回生成指定算法密钥生成器的 KeyGenerator 对象
KeyGenerator kg = KeyGenerator.getInstance("AES");
//AES 要求密钥长度为 128
kg.init(128, new SecureRandom(password.getBytes()));
//生成一个密钥
SecretKey secretKey = kg.generateKey();
return new SecretKeySpec(secretKey.getEncoded(), "AES");// 转换为AES专用密钥
}
主要是红色部分的问题,修改后代码:
private static SecretKeySpec getSecretKey(final String password) throws NoSuchAlgorithmException {
//返回生成指定算法密钥生成器的 KeyGenerator 对象
KeyGenerator kg = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(password.getBytes());
//AES 要求密钥长度为 128
kg.init(128, random);
//生成一个密钥
SecretKey secretKey = kg.generateKey();
return new SecretKeySpec(secretKey.getEncoded(), "AES");// 转换为AES专用密钥
}
或者修改SecretKey的生成方式,如下:
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("AES");
DESKeySpec keySpec = new DESKeySpec(strKey.getBytes("utf-8"));
keyFactory.generateSecret(keySpec);
参考:
正文到此结束
- 本文标签: Java
- 本文链接: https://zhyd.me/article/78
- 版权声明: 本文由张亚东原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权