`
lyjilu
  • 浏览: 175658 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

IBM AIX 服务器 PBE解密 报错 Given final block not properly padded

阅读更多
在各个客户服务器上运行好好的PBE加解密程序突然在一个用AIX服务器的客户那报错了,错误信息为:Given final block not properly padded,从异常堆栈发现,其它服务器的jdk 中的加密提供者都是 sun的,而这台aix服务jdk解密提供者为 ibm的!!!
看这意思貌似是填充相关的错误,首先反应是google一下,== 谷歌已经没了,那百度一下。
网上说的有几种情况,
1、加密代码问题,导致报错;但我这段代码可以正常运行,只是在不同加解密提供商下导致的错误,排除
2、说不同平台的SecureRandom random=new SecureRandom(); 实现不同,需要使用程序指定的方式生成随机数。我看了下自己的加密算法,貌似解密的时候,并没有用到此随机数,只有在加密的时候用它生成salt. 所以,半信半疑的排除了
无奈之下,我将算法 由 PBEWithSHA1AndDESede 修改为:PBEWithMD5AndDES  进行测试,结果居然能正常运行,可以想象,ibm提供的pbe解密应该是没有提供 PBEWithSHA1AndDESede 这种算法。如果提供了,那应该就能正常解密,毕竟pbe是标准对称加密算法,所有算法提供者提供的算法计算结果应该都一样,变的只是密码而已。
 
附上代码:
private static final String PBECODER_PASSWORD = "www.lyjilu.com";
	/**
	 * JAVA6支持以下任意一种算法
	 * PBEWITHMD5ANDDES
	 * PBEWithMD5AndDES
	 * PBEWITHMD5ANDTRIPLEDES
	 * PBEWITHSHAANDDESEDE
	 * PBEWITHSHA1ANDRC2_40
	 * PBKDF2WITHHMACSHA1
	 * */
	public static final String ALGORITHM="PBEWithMD5AndDES";
	
	/**
	 * 迭代次数
	 * */
	public static final int ITERATION_COUNT=100;
	
	/**
	 * 盐初始化
	 * 盐长度必须为8字节
	 * @return byte[] 盐
	 * */
	public static byte[] initSalt() throws Exception{
		//实例化安全随机数
		SecureRandom random=new SecureRandom();
		//产出盐
		return random.generateSeed(8);
	}
	
	/**
	 * 转换密钥
	 * @param password 密码
	 * @return Key 密钥
	 * */
	private static Key toKey(String password) throws Exception{
		//密钥转换
		PBEKeySpec keySpec=new PBEKeySpec(password.toCharArray());
		//实例化
		SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(ALGORITHM);
		//生成密钥
		SecretKey secretKey=keyFactory.generateSecret(keySpec);
		return secretKey;
	}
	/**
	 * 加密
	 * @param data 待加密数据
	 * @param password 密码
	 * @param salt 盐
	 * @return byte[] 加密数据
	 * 
	 * */
	public static byte[] encrypt(byte[] data,String password,byte[] salt) throws Exception{
		//转换密钥
		Key key=toKey(password);
		//实例化PBE参数材料
		PBEParameterSpec paramSpec=new PBEParameterSpec(salt,ITERATION_COUNT);
		//实例化
		Cipher cipher=Cipher.getInstance(ALGORITHM);
		//初始化
		cipher.init(Cipher.ENCRYPT_MODE, key,paramSpec);
		//执行操作
		return cipher.doFinal(data);
	}
	
	public static byte[] encrypt(byte[] data,byte[] salt) throws Exception{
		String pwd  = PBECODER_PASSWORD;
		return encrypt(data,pwd, salt);
	}
	/**
	 * 解密
	 * @param data 待解密数据
	 * @param password 密码
	 * @param salt 盐
	 * @return byte[] 解密数据
	 * 
	 * */
	public static byte[] decrypt(byte[] data,String password,byte[] salt) throws Exception{
		//转换密钥
		Key key=toKey(password);
		//实例化PBE参数材料
		PBEParameterSpec paramSpec=new PBEParameterSpec(salt,ITERATION_COUNT);
		//实例化
		Cipher cipher=Cipher.getInstance(ALGORITHM);
		//初始化
		cipher.init(Cipher.DECRYPT_MODE, key,paramSpec);
		//执行操作
		return cipher.doFinal(data);
	}
	
	public static byte[] decrypt(byte[] data,byte[] salt) throws Exception{
		return decrypt(data, PBECODER_PASSWORD, salt);
	}
 
分享到:
评论

相关推荐

    java 文件加密解密 DES PBE RSA DH DSA ECC 等算法代码

    ### Java 文件加密解密关键技术详解 #### 一、概述 在信息安全领域,加密技术是保障数据安全的关键手段之一。本文将详细介绍Java中常用的几种加密算法,包括但不限于DES、PBE、RSA、DH、DSA和ECC等,并提供部分...

    对称加密算法PBE(Java).rar

    在Java中,PBE的实现主要依赖于`javax.crypto`包中的类和接口,如`PBEKeySpec`(用于存储密码和盐值)、`PBEParameterSpec`(用于存储盐值和迭代次数)、`PBE Cipher`(用于执行加密和解密操作)等。以下是一般步骤...

    java jasypt包PBEWithMD5AndDES算法加解密C#版

    Java 使用jasypt包辅助,实现密码加解密。本方法实现了C#版,适用于一方加密另一方解密的情况,根据默认配置改版,可在当前版本基础上自定义更改指定算法、hash迭代次数、salt生成方式等

    PBE1.7.4.1.rar

    Polaris Bios Editor(PBE)1.7.4.1是一个专门针对AMD北极星架构显卡进行BIOS修改的工具,它为用户提供了更深入的控制权,以优化显卡性能和调整功耗。这款软件的最新版本1.7.4.1着重添加了对WX7100显卡的支持,使得...

    java与C#的PBE加密

    **Java与C#的PBE加密** PBE(Password-Based Encryption)基于密码的加密是一种常见的加密方式,它结合了密钥派生函数(PBKDF)和对称加密算法,如DES(Data Encryption Standard),用于保护数据的安全。在Java和...

    VASP赝势文件PAW PBE

    标题中的“VASP赝势文件PAW PBE”是指用于VASP(Vienna Ab initio Simulation Package)软件进行第一性原理量子力学计算的一种特定类型的赝势库。在DFT(密度泛函理论)计算中,赝势是模拟原子核与电子相互作用的一...

    ava加密解密 DES PBE RSA DH DSA ECC 等算法

    本文将主要介绍几种常见的加密解密算法,包括DES、PBE、RSA、DH、DSA以及ECC,并提供简单的代码示例。 首先,我们来看基本的单向加密算法。这些算法主要用于生成不可逆的散列值,以验证数据的完整性和一致性。 1. ...

    java多种加密解密算法:SHA算法,HMAC算法,DES算法,PBE算法,AES算法,RSA算法,数字签名,D-H算法

    本文将深入探讨Java中常见的几种加密解密算法:SHA算法、HMAC算法、DES算法、PBE算法、AES算法、RSA算法、数字签名以及D-H算法。 1. SHA(Secure Hash Algorithm)算法: SHA是一种散列函数,它能将任意长度的输入...

    Java Jct 加密解密工具包源码.rar

    Java Jct 加密解密工具包源码,WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0,作者吴东升 常蕴秋,BlowfishTool.java... PBETool.java封装同PBE(基于口令的加密)算法有关的方法,可用使用PBE算法加密和解密

    PBE——Password-based encryption(基于密码加密)

    与传统的对称加密算法(如DES、3DES、AES、Blowfish、RC2和RC4)相比,PBE在安全性上有所增强,因为它引入了两个重要的概念:盐(salt)和迭代次数。 盐是随机生成的一段数据,它的作用是增加密码的复杂性,防止...

    vasp第一性计算所需pbe赝势模型

    赝势(pseudopotential),或有效势(effective potential),是指在对能带结构进行数值计算时所引入的一个虚拟的势。引入赝势有助于实现一个复杂的系统的近似计算。事实上,赝势近似法是正交平面波...pbe是其中的一种

    Springboot+PBEWITHHMACSHA512ANDAES-128配置文件密码加密

    这是一种密码基于密钥的加密(Password-Based Encryption,简称PBE)方法,结合了HMAC(Hash-based Message Authentication Code)和AES(Advanced Encryption Standard)算法。HMAC-SHA512用于生成基于密码的密钥,...

    SpringBoot 集成 Jasypt 对数据库加密以及踩坑

    import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; public class JasyptUtil { public static String encyptPwd(String password, String value) { PooledPBEStringEncryptor encryptor = new ...

    PBE是一种基于口令的加密算法,使用口令代替其他对称加密算法中的密钥,其特点在于口令由用户自己掌管,不借助任何物理媒体;

    PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 ...

    [JAVA加解密]DES,AES,PBE,DH,RSA,ElGamal等算法实现及DataServlet实例

    加解密技术扮演着保护信息安全的核心角色。本文将深入探讨几种常见的加密算法——DES、AES、PBE、DH、RSA以及ElGamal,并结合DataServlet实例来阐述如何在实际应用中使用这些算法。 首先,DES(Data Encryption ...

    Android基于密码的加密(PBE)实现。.zip

    接着,使用`javax.crypto.Cipher`进行加密和解密操作,选择如AES(Advanced Encryption Standard)这样的对称加密算法,并指定PBE算法,如`PBEWithMD5AndTripleDES`、`PBEWithSHA1AndDESede`或者更现代的`...

    jasypt加密解密工具含源码有界面

    Jasypt(Java Simple and Strong Encryption)是一个强大的加密库,提供了简单易用的API,让开发者可以轻松地在应用程序中实现加密和解密功能。本篇文章将深入探讨Jasypt的核心概念、使用方法以及如何将其与Spring ...

    JAVA加密和解密的艺术(第二版).zip

    《JAVA加密和解密的艺术(第二版)》是一本深入探讨Java平台上的加密与解密技术的专业书籍。这本书不仅提供了理论知识,还包含了丰富的实践示例,帮助读者理解和掌握加密技术在实际应用中的运用。其内容涵盖了从基本...

    PBE 加密实例

    PBE 加密实例,加密后用base64转码.密文具有一定的时效性,时间可自定义

    PBE Pharo Smalltalk Document

    Pharo 开发文档,需要好好阅读 Pharo by Example Andrew P. Black Stéphane Ducasse Oscar Nierstrasz Damien Pollet with Damien Cassou and Marcus Denker Version of 2009-10-28

Global site tag (gtag.js) - Google Analytics