解密的时候报错:

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创建的方式不同而引起的错误

最新文章

  1. Ubuntu 14.04安装Cinnamon桌面环境
  2. [DPDK][转]DPDK编程开发(4)—lcore
  3. 转:中间人攻击利用框架bettercap测试
  4. 学习hadoop,搭建hadoop遇到一些特殊问题
  5. 深入css中的margin
  6. C++求最大公约数
  7. Zookeeper,Hbase 伪分布,集群搭建
  8. ci 中使用 pdo 连接 mysql
  9. VueJs一些资料网站链接
  10. 从Android Handler内部类到WeakReference的知识关联
  11. socket 通信之select
  12. CSS自学笔记(10):CSS3盒子模型
  13. c/c++测试函数的运行时间(八种方法)
  14. LeetCode 88. Merge Sorted Array(合并有序数组)
  15. Linux chown命令
  16. JS 变量类型互相转换
  17. 解决 Intellij IDEA Cannot Resolve Symbol ‘XXX’ 问题
  18. Eclipes导入工程
  19. 乐观锁和悲观锁及CAS实现
  20. Mysql DBA 20天速成教程

热门文章

  1. PYTHON-匿名函数,递归与二分法,面向过程编程-练习
  2. C++ code:More Loop Designs
  3. zoj3469 区间dp好题
  4. hdu4122
  5. cf220B莫队
  6. Python reverse
  7. TotoriseGit安装
  8. 015 在大数据中,关于mapreduce的粗略优化,以及mapreduce的处理过程解释
  9. 使用numpy产生随机数
  10. 全排列-hdu1716