现象描述:
windows上加解密正常,linux上加密正常,解密时发生如下异常:

javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*…)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*…)
at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*…)
at javax.crypto.Cipher.doFinal(DashoA13*…)
at chb.test.crypto.AESUtils.crypt(AESUtils.java:386)
at chb.test.crypto.AESUtils.AesDecrypt(AESUtils.java:254)
at chb.test.crypto.AESUtils.main(AESUtils.java:40)

解决方法:
经过检查之后,定位在生成KEY的方法上,如下:

public static SecretKey getKey (String strKey) {try {         KeyGenerator _generator = KeyGenerator.getInstance( "AES" );_generator.init(128, new SecureRandom(strKey.getBytes()));return _generator.generateKey();}  catch (Exception e) {throw new RuntimeException( " 初始化密钥出现异常 " );}}

修改到如下方式,问题解决:

  public static SecretKey getKey(String strKey) {try {         KeyGenerator _generator = KeyGenerator.getInstance( "AES" );SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );secureRandom.setSeed(strKey.getBytes());_generator.init(128,secureRandom);return _generator.generateKey();}  catch (Exception e) {throw new RuntimeException( " 初始化密钥出现异常 " );}}

原因分析

SecureRandom 实现完全隨操作系统本身的內部狀態,除非調用方在調用 getInstance 方法之後又調用了 setSeed 方法;该实现在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系统上则不同。

解决Linux操作系统下AES解密失败的问题相关推荐

  1. aes linux加密 windows解密,解决Linux操作系统下DES、AES解密失败的问题

    windows上加解密正常,linux上加密正常,解密时发生如下异常: javax.crypto.BadPaddingException: Given final block not properly ...

  2. oracle xe 乱码_关于Linux操作系统下终端乱码的完美解决方法

    初入linux的程序员们,经常会受到乱码的问候.可谓"始乱终弃".因为乱码,并且最终放弃了linux的不在少数.好吧,言归正传,先看看各类乱码是怎么形成的. 中文字符乱码 这种情况 ...

  3. Linux操作系统下进程讲解(史上最强总结)

    Linux操作系统下进程讲解 一.进程的基本概念: 1. 什么是进程 在传统的操作系统中,程序不可以独立的运行,作为资源分配和独立运行的基本单位都是进程.进程的定义是一个可执行中程序的实例,系统中每一 ...

  4. linux操作系统下 c语言编程入门

    linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...

  5. linux操作系统下c语言编程入门

    linux操作系统下c语言编程入门  整理编写:007xiong  原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识  2)Linux程序设计入门--进程介绍  3)Linux ...

  6. 【转贴】linux操作系统下c语言编程入门

    [转贴]linux操作系统下c语言编程入门 发信人: Lerry (驴是的念来过倒·杏红等头墙上爬), 信区: Linux 标 题: linux操作系统下c语言编程入门 发信站: 哈工大紫丁香 (Fr ...

  7. Linux操作系统下Moodle平台的搭建

    转自http://fuwu.aieln.com/info/show/711/ 软件下载地址(Moodle2.2.2(Build:20120312)):http://bbs.aieln.com/arti ...

  8. 简单认识Samba服务以及Linux操作系统下部署案例解析

    1.首先在介绍Samba服务之前我们先来简单的认识一下SMB协议.SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主 ...

  9. linux oracle em使用,案例:五步解决linux操作系统Oracle EM乱码的问题

    天萃荷净 用户生产环境Linux系统Oracle数据库配置OEM使用时出现乱码情况 如果想以中文显示,则需要修改一些配置文件. 包括三个目录: $ORACLE_HOME/jdk/jre/lib $OR ...

最新文章

  1. 西瓜书_学习任务_更新至9.5号
  2. MindCon极客周 | 第三届全新席卷而来,SIG英雄帖,做硬核玩家,夺万元大奖!
  3. C++longest increasing subsequence 最长递增子序列的实现之二(附完整源码)
  4. Python学习---Django的基础操作180116
  5. 2018.12.18运算符,分支结构(循环),异常处理,函数
  6. python的错误处理——try语句
  7. 双稀疏主题模型(Dual-Sparse Topic Model)编程实现中的细节 Java
  8. matlab字符串操作总结
  9. Eclipse自动部署项目到Tomcat的webapps下的有效方法
  10. spark的朴素贝叶斯分类原理
  11. 多线程 简单的实现案例
  12. 2.vue的不更新特性-重用机制和key属性-data及其他字段-vue生命周期
  13. 软件工程(敏捷过程和极限编程)
  14. 最新Oreo支付系统平台完整源码+已全开源
  15. matlab画直方图
  16. 科技解读:com域名价格为什么连年上涨?小微企业怎样应对?
  17. idea修改批量替换快捷键,idea快捷键替换处理对象 idea替换快捷键,批量处理对象的操作...
  18. 智能陈桥五笔输入法 for linux,解决在Linux下安装陈桥五笔输入法的方法
  19. OpenGL光栅化作业:【bresenham算法】GL_POINTS为基础画圆
  20. system-config-network

热门文章

  1. 文案月薪3w?月薪10w的设计大神笑而不语
  2. 解决/mnt中有hgfs无共享文件
  3. B - Ada and Queue
  4. Unity3d访问数据库
  5. Hbase Compaction 队列数量较大分析
  6. cmake 学习笔记
  7. “CV_RGB2BGR”: 未声明的标识符
  8. Dubbo-go v3.0 正式发布 ——打造国内一流开源 Go 服务框架
  9. 快速上手 Serverless | 入门第一课
  10. 分布式服务架构下的混沌工程实践