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中常见的几种加密解密算法:SHA算法、HMAC算法、DES算法、PBE算法、AES算法、RSA算法、数字签名以及D-H算法。 1. SHA(Secure Hash Algorithm)算法: SHA是一种散列函数,它能将任意长度的输入...
对称加密算法是一种常见的数据加密技术,它使用相同的密钥进行加密和解密。在Java中,Password-Based Encryption(PBE)是对称加密的一种特殊形式,它基于密码来生成加密密钥,增强了安全性。PBE的主要优点是它允许...
PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 ...
- **RSA**:由Ron Rivest、Adi Shamir和Leonard Adleman共同发明,是最常用的非对称加密算法之一。 - **DH**:Diffie-Hellman密钥交换协议,用于安全地交换加密密钥。 - **DSA**:数字签名算法,主要用于生成和验证...
总的来说,这本书是Java开发者深入学习加密解密技术的宝贵资源,无论你是初学者还是有经验的开发者,都能从中受益匪浅,提升你在网络安全领域的专业技能。通过阅读这本书,你将能够更好地应对各种安全挑战,保护你的...
WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0,作者吴东升 常蕴秋,BlowfishTool.java封装同Blowfish对称加密算法有关的方法,包括了使用创建Blowfish密码,使用Blowfish加密、解密, 使用PBE(基于口令的...
1. **AES(Advanced Encryption Standard)**:高级加密标准,是一种对称加密算法,因其高效性和安全性被广泛应用。AESUtil.java可能是实现AES加密解密功能的工具类,通常包括AES的ECB、CBC、CFB、OFB和CTR模式,...
PBE(Password-Based Encryption)基于密码的加密是一种常见的加密方式,它结合了密钥派生函数(PBKDF)和对称加密算法,如DES(Data Encryption Standard),用于保护数据的安全。在Java和C#中,PBE提供了使用用户...
首先,DES(Data Encryption Standard)是一种对称加密算法,使用56位的密钥对数据进行加密和解密。虽然它的安全性相比现代标准较低,但作为历史上的经典算法,理解其工作原理有助于理解其他加密算法。 AES...
1. **DES(Data Encryption Standard)**:是一种古老的对称加密算法,使用56位密钥。由于安全性较低,现在已被AES(Advanced Encryption Standard)所取代。在Java中,可以使用`javax.crypto.Cipher`类处理DES加密...
文件校验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对称加密算法PBE定义与用法实例分析 JAVA对称加密算法PBE(Password Based Encryption,即基于口令加密)是一种常用的加密算法,它通过将口令转换为密钥,然后使用该密钥对数据进行加密。PBE算法优点在于可以...
包含对称加密算法:DES,3DEA,AES,PBE 包含对称加密算法:DH,RAS,ElGamal 包含摘要算法:MD2,MD4,MD5,SHA1,SHA2(SHA-224,SHA-256,SHA-384,SHA-512) 数字签名算法:RSA,DSA,ECDSA 详情请查看:...
Java加密技术是Java编程语言中用于保障数据安全的一系列加密方法和技术,它包括了单向加密算法、对称加密算法、非对称加密算法以及加密算法的高级应用如数字签名和数字证书等。本文将详细介绍这些加密技术,并结合...
在实际应用中,通常会根据需求选择合适的算法和加密方式,比如在需要高度安全性的场合,可能会使用RSA或ECC(椭圆曲线加密)进行密钥交换,在对性能要求较高的场合,可能会选择AES等对称加密算法。 通过掌握Java加...
3. **DES(Data Encryption Standard)**:是一种对称加密算法,它使用相同的密钥进行加密和解密,虽然现在由于其较短的密钥长度(56位)而被视为不安全,但在早期广泛使用。 4. **PBE(Password-Based Encryption...
- **加密过程**:使用口令和盐值生成加密密钥,然后用该密钥对数据进行对称加密,常见的对称加密算法如AES。 - **解密过程**:同样的,需要口令和盐值来重新生成相同的密钥,然后使用该密钥对已加密的数据进行解密。...
- Java中的`javax.crypto.Cipher`类是实现加密和解密的核心类,它可以与各种加密算法配合使用,如AES、RSA等。 5. **SSL/TLS**: - 在网络通信中,Java的JSSE(Java Secure Socket Extension)提供了实现SSL/TLS...
3. **RSA加密(RSACoder.java)**:RSA是一种非对称加密算法,基于大整数因子分解的困难性。它有两个密钥:公钥用于加密,私钥用于解密。在Java中,`java.security`包提供了RSA密钥对的生成和加密/解密操作。 4. **...