解决Linux操作系统下AES解密失败的问题
现象描述:
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解密失败的问题相关推荐
- aes linux加密 windows解密,解决Linux操作系统下DES、AES解密失败的问题
windows上加解密正常,linux上加密正常,解密时发生如下异常: javax.crypto.BadPaddingException: Given final block not properly ...
- oracle xe 乱码_关于Linux操作系统下终端乱码的完美解决方法
初入linux的程序员们,经常会受到乱码的问候.可谓"始乱终弃".因为乱码,并且最终放弃了linux的不在少数.好吧,言归正传,先看看各类乱码是怎么形成的. 中文字符乱码 这种情况 ...
- Linux操作系统下进程讲解(史上最强总结)
Linux操作系统下进程讲解 一.进程的基本概念: 1. 什么是进程 在传统的操作系统中,程序不可以独立的运行,作为资源分配和独立运行的基本单位都是进程.进程的定义是一个可执行中程序的实例,系统中每一 ...
- linux操作系统下 c语言编程入门
linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...
- linux操作系统下c语言编程入门
linux操作系统下c语言编程入门 整理编写:007xiong 原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux ...
- 【转贴】linux操作系统下c语言编程入门
[转贴]linux操作系统下c语言编程入门 发信人: Lerry (驴是的念来过倒·杏红等头墙上爬), 信区: Linux 标 题: linux操作系统下c语言编程入门 发信站: 哈工大紫丁香 (Fr ...
- Linux操作系统下Moodle平台的搭建
转自http://fuwu.aieln.com/info/show/711/ 软件下载地址(Moodle2.2.2(Build:20120312)):http://bbs.aieln.com/arti ...
- 简单认识Samba服务以及Linux操作系统下部署案例解析
1.首先在介绍Samba服务之前我们先来简单的认识一下SMB协议.SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主 ...
- linux oracle em使用,案例:五步解决linux操作系统Oracle EM乱码的问题
天萃荷净 用户生产环境Linux系统Oracle数据库配置OEM使用时出现乱码情况 如果想以中文显示,则需要修改一些配置文件. 包括三个目录: $ORACLE_HOME/jdk/jre/lib $OR ...
最新文章
- 西瓜书_学习任务_更新至9.5号
- MindCon极客周 | 第三届全新席卷而来,SIG英雄帖,做硬核玩家,夺万元大奖!
- C++longest increasing subsequence 最长递增子序列的实现之二(附完整源码)
- Python学习---Django的基础操作180116
- 2018.12.18运算符,分支结构(循环),异常处理,函数
- python的错误处理——try语句
- 双稀疏主题模型(Dual-Sparse Topic Model)编程实现中的细节 Java
- matlab字符串操作总结
- Eclipse自动部署项目到Tomcat的webapps下的有效方法
- spark的朴素贝叶斯分类原理
- 多线程 简单的实现案例
- 2.vue的不更新特性-重用机制和key属性-data及其他字段-vue生命周期
- 软件工程(敏捷过程和极限编程)
- 最新Oreo支付系统平台完整源码+已全开源
- matlab画直方图
- 科技解读:com域名价格为什么连年上涨?小微企业怎样应对?
- idea修改批量替换快捷键,idea快捷键替换处理对象 idea替换快捷键,批量处理对象的操作...
- 智能陈桥五笔输入法 for linux,解决在Linux下安装陈桥五笔输入法的方法
- OpenGL光栅化作业:【bresenham算法】GL_POINTS为基础画圆
- system-config-network