javax.crypto.BadPaddingException: Given final block not properly padded解决方案
2024-08-25 03:17:55
解密的时候报错:
javax.crypto.BadPaddingException: Given final block not properly padded
该异常是在解密的时候抛出的,加密的方法没有问题。
但是两个方法的唯一差别是Cipher对象的模式不一样,这就排除了程序写错的可能性。再看一下异常的揭示信息,大概的意思是:提供的字块不符合填补的。原来在用DES加密的时候,最后一位长度不足64的,它会自动填补到64,那么在我们进行字节数组到字串的转化过程中,可以把它填补的不可见字符改变了,所以引发系统抛出异常。大家还记得邮件传输通常会把一些信息编码保存,就是Base64,那样保证了信息的完整性,所以我们就是利用一下下了。
原来的代码:
private Key initKeyForAES(String key) throws NoSuchAlgorithmException {
if (null == key || key.length() == 0) {
throw new NullPointerException("key not is null");
}
SecretKeySpec key2 = null;try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(key.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
key2 = new SecretKeySpec(enCodeFormat, "AES");
} catch (NoSuchAlgorithmException ex) {
throw new NoSuchAlgorithmException();
}
return key2; }
主要是红色部分的问题
修改后代码:
private Key initKeyForAES(String key) throws NoSuchAlgorithmException {
if (null == key || key.length() == 0) {
throw new NullPointerException("key not is null");
}
SecretKeySpec key2 = null;
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(key.getBytes());
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, random);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
key2 = new SecretKeySpec(enCodeFormat, "AES");
} catch (NoSuchAlgorithmException ex) {
throw new NoSuchAlgorithmException();
}
return key2; }
其实就是SecureRandom创建的方式不同而引起的错误
最新文章
- Ubuntu 14.04安装Cinnamon桌面环境
- [DPDK][转]DPDK编程开发(4)—lcore
- 转:中间人攻击利用框架bettercap测试
- 学习hadoop,搭建hadoop遇到一些特殊问题
- 深入css中的margin
- C++求最大公约数
- Zookeeper,Hbase 伪分布,集群搭建
- ci 中使用 pdo 连接 mysql
- VueJs一些资料网站链接
- 从Android Handler内部类到WeakReference的知识关联
- socket 通信之select
- CSS自学笔记(10):CSS3盒子模型
- c/c++测试函数的运行时间(八种方法)
- LeetCode 88. Merge Sorted Array(合并有序数组)
- Linux chown命令
- JS 变量类型互相转换
- 解决 Intellij IDEA Cannot Resolve Symbol ‘XXX’ 问题
- Eclipes导入工程
- 乐观锁和悲观锁及CAS实现
- Mysql DBA 20天速成教程