Java 加密解密之对称加密算法PBE
PBE是一种基于口令的加密算法,使用口令代替其他对称加密算法中的密钥,其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。
PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。
JDK对DESede算法的支持
算法/密钥长度/默认密钥长度:
1.PBEWithMD5AndDES/56/56
2.PBEWithMD5AndTripleDES/112,168/168
3.PBEWithSHA1AndDESede/112,168/168
4.PBEWithSHA1AndRC2_40/40 to 1024/128
工作模式:CBC
填充方式:PKCS5Padding
工作模式和填充方式请参考: JAVA加密解密基础
十六进制工具类Hex.java,见: java byte数组与十六进制字符串互转
PBE加密解密的java实现:
PBECoder.java
import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; /** * PBE Coder<br/> * Algorithm/secret key length/default secret key length/<br/> * 1.PBEWithMD5AndDES/56/56 * 2.PBEWithMD5AndTripleDES/112,168/168 * 3.PBEWithSHA1AndDESede/112,168/168 * 4.PBEWithSHA1AndRC2_40/40 to 1024/128 * mode: CBC <br/> * padding: PKCS5Padding * @author Aub * */ public class PBECoder { public static final String ALGORITHM = "PBEWITHMD5andDES"; public static final int ITERATION_COUNT = 100; /** * 初始盐<br/> * 盐的长度必须为8位 * @return byte[] 盐 * @throws Exception */ 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); //生成密钥 return keyFactory.generateSecret(keySpec); } /** * 加密 * * @param data 待加密数据 * @param key 密钥 * @param salt 盐 * @return byte[] 加密数据 * @throws Exception */ 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); } /** * 解密 * * @param data 待机密数据 * @param key 密钥 * @param salt 盐 * @return byte[] 解密数据 * @throws Exception */ 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); } private static String showByteArray(byte[] data){ if(null == data){ return null; } StringBuilder sb = new StringBuilder("{"); for(byte b:data){ sb.append(b).append(","); } sb.deleteCharAt(sb.length()-1); sb.append("}"); return sb.toString(); } public static void main(String[] args) throws Exception { byte[] salt = initSalt(); System.out.println("salt:"+showByteArray(salt)); //这里的password需要是ASCII码,不然会报异常 String password = "1111"; System.out.println("口令:"+password); String data ="PBE数据"; System.out.println("加密前数据: string:"+data); System.out.println("加密前数据: byte[]:"+showByteArray(data.getBytes())); System.out.println(); byte[] encryptData = encrypt(data.getBytes(), password,salt); System.out.println("加密后数据: byte[]:"+showByteArray(encryptData)); System.out.println("加密后数据: hexStr:"+Hex.encodeHexStr(encryptData)); System.out.println(); byte[] decryptData = decrypt(encryptData, password,salt); System.out.println("解密后数据: byte[]:"+showByteArray(decryptData)); System.out.println("解密后数据: string:"+new String(decryptData)); } }
参考《java加密与解密的艺术》
相关推荐
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
对称加密算法PBE(Java).rar NetBeans环境可运行 对称加密算法PBE(Java).rar NetBeans环境可运行
PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 ...
java 文件加密解密 DES PBE RSA DH DSA ECC 等算法代码,如有需要可直接下载
WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0,作者吴东升 常蕴秋,BlowfishTool.java封装同Blowfish对称加密算法有关的方法,包括了使用创建Blowfish密码,使用Blowfish加密、解密, 使用PBE(基于口令的...
包括(SHA算法,HMAC算法,DES算法,PBE算法,AES算法,RSA算法,数字签名,D-H算法等)
Java加密技术(三)——PBE算法 Java加密技术(四)——非对称加密算法RSA Java加密技术(五)——非对称加密算法的由来DH Java加密技术(六)——数字签名算法DSA Java加密技术(七)——非对称加密算法最高级ECC ...
文件校验2096.8 小结211第7章初等数据加密—对称加密算法2137.1 对称加密算法简述2137.2 数据加密标准—DES 2147.3 三重DES—DESede 2227.4 高级数据加密标准—AES 2277.5 国际数据加密标准—IDEA 2327.6 基于口令...
文件校验209 6.8 小结211 第7章初等数据加密—对称加密算法213 7.1 对称加密算法简述213 7.2 数据加密标准—DES 214 7.3 三重DES—DESede 222 7.4 高级数据加密标准—AES 227 7.5 国际数据加密标准—IDEA 232 7.6 ...
java的PBEWithMD5AndDES加密 C#的PBEWithMD5AndDES加密
加密算法包含:AES、DES、DH、ECDSA、MD5、PBE、RC4、RSA、ThreeDES等
包含对称加密算法:DES,3DEA,AES,PBE 包含对称加密算法:DH,RAS,ElGamal 包含摘要算法:MD2,MD4,MD5,SHA1,SHA2(SHA-224,SHA-256,SHA-384,SHA-512) 数字签名算法:RSA,DSA,ECDSA 详情请查看:...
JCT 为java开发者提供实用、方便、简洁的加密和解密相关的工具代码。1.0版提供Blowfish,SHA与MD5数字摘要,PBE基于口令的加密,RSA算法工具类,使这些算法更容易在编成中使用.文件包中含源码、文档、class包WDSsoft:...
java加密技术 与单向加密算法MD5&SHA;&MAC; 对称加密算法DES&AES; PBE 算法
主要介绍了JAVA对称加密算法PBE定义与用法,结合实例形式分析了JAVA对称加密算法PBE的概念、原理、定义及使用方法,需要的朋友可以参考下
[JAVA加解密]DES,AES,PBE,DH,RSA,ElGamal等算法实现及DataServlet实例
Java 使用jasypt包辅助,实现密码加解密。本方法实现了C#版,适用于一方加密另一方解密的情况,根据默认配置改版,可在当前版本基础上自定义更改指定算法、hash迭代次数、salt生成方式等
DES PBE RSA DH DSA ECC 等算法代码
包含java加解密算法(base64,des,3des,aes,pbe,dh,rsa,ElGamal) 包含java摘要算法(md2,md4,md5,sha1,sha2((SHA-224,SHA-256, SHA-384,SHA-512)),mac) 包含签名算法(rsa,dsa,ecdsa)
JavaSecurity 使用摘要算法 Base64 MD SHA MAC对称加密 DES AES PBE非对称加密算法 DH RSA ElGamal