`

Java加密技术(三)——PBE算法

阅读更多
    除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法——PBE

PBE
    PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。



通过java代码实现如下:Coder类见 Java加密技术(一)
import java.security.Key;
import java.util.Random;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

/**
 * PBE安全编码组件
 * 
 * @author 梁栋
 * @version 1.0
 * @since 1.0
 */
public abstract class PBECoder extends Coder {
	/**
	 * 支持以下任意一种算法
	 * 
	 * <pre>
	 * PBEWithMD5AndDES 
	 * PBEWithMD5AndTripleDES 
	 * PBEWithSHA1AndDESede
	 * PBEWithSHA1AndRC2_40
	 * </pre>
	 */
	public static final String ALGORITHM = "PBEWITHMD5andDES";

	/**
	 * 盐初始化
	 * 
	 * @return
	 * @throws Exception
	 */
	public static byte[] initSalt() throws Exception {
		byte[] salt = new byte[8];
		Random random = new Random();
		random.nextBytes(salt);
		return salt;
	}

	/**
	 * 转换密钥<br>
	 * 
	 * @param password
	 * @return
	 * @throws Exception
	 */
	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
	 * @throws Exception
	 */
	public static byte[] encrypt(byte[] data, String password, byte[] salt)
			throws Exception {

		Key key = toKey(password);

		PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);
		Cipher cipher = Cipher.getInstance(ALGORITHM);
		cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);

		return cipher.doFinal(data);

	}

	/**
	 * 解密
	 * 
	 * @param data
	 *            数据
	 * @param password
	 *            密码
	 * @param salt
	 *            盐
	 * @return
	 * @throws Exception
	 */
	public static byte[] decrypt(byte[] data, String password, byte[] salt)
			throws Exception {

		Key key = toKey(password);

		PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);
		Cipher cipher = Cipher.getInstance(ALGORITHM);
		cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);

		return cipher.doFinal(data);

	}
}


再给出一个测试类:
import static org.junit.Assert.*;

import org.junit.Test;

/**
 * 
 * @author 梁栋
 * @version 1.0
 * @since 1.0
 */
public class PBECoderTest {

	@Test
	public void test() throws Exception {
		String inputStr = "abc";
		System.err.println("原文: " + inputStr);
		byte[] input = inputStr.getBytes();

		String pwd = "efg";
		System.err.println("密码: " + pwd);

		byte[] salt = PBECoder.initSalt();

		byte[] data = PBECoder.encrypt(input, pwd, salt);

		System.err.println("加密后: " + PBECoder.encryptBASE64(data));

		byte[] output = PBECoder.decrypt(data, pwd, salt);
		String outputStr = new String(output);

		System.err.println("解密后: " + outputStr);
		assertEquals(inputStr, outputStr);
	}

}


控制台输出:
原文: abc
密码: efg
加密后: iCZ0uRtaAhE=

解密后: abc

    后续我们会介绍非对称加密算法,如RSA、DSA、DH、ECC等。



相关链接:
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(二)——对称加密DES&AES
Java加密技术(三)——PBE算法
Java加密技术(四)——非对称加密算法RSA
Java加密技术(五)——非对称加密算法的由来DH
Java加密技术(六)——数字签名算法DSA
Java加密技术(七)——非对称加密算法最高ECC
Java加密技术(八)——数字证书
Java加密技术(九)——初探SSL
Java加密技术(十)——单向认证
Java加密技术(十一)——双向认证
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
  • 描述: PBE交互序列图
  • 大小: 22.7 KB
25
1
分享到:
评论
1 楼 ak23173969 2013-09-29  
楼主,很好,很强大,收益匪浅,非常值得学习与收藏

相关推荐

    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 文件加密解密 DES PBE RSA DH DSA ECC 等算法代码

    #### 三、Java中的加密技术 ##### 3.1 单向加密算法 这些算法主要用于数据完整性验证,它们的特点是加密过程不可逆。 - **BASE64**:虽然通常被认为是编码格式而非加密算法,但在实际应用中,它经常被用于传输...

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

    对称加密算法是一种常见的数据加密技术,它使用相同的密钥进行加密和解密。在Java中,Password-Based Encryption(PBE)是对称加密的一种特殊形式,它基于密码来生成加密密钥,增强了安全性。PBE的主要优点是它允许...

    java与C#的PBE加密

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

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

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

    java加密算法:Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法

    java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...

    java加密技术大全

    Java加密技术是保护数据安全的重要工具,广泛应用于网络通信、数据存储、数字签名等领域。本资源包涵盖了Java中常见的加密算法和技术,包括基础的哈希算法、对称加密、非对称加密以及证书签名和SSL/TLS协议。下面将...

    java加密技术

    Java加密技术是Java编程语言中用于保障数据安全的一系列加密方法和技术,它包括了单向加密算法、对称加密算法、非对称加密算法以及加密算法的高级应用如数字签名和数字证书等。本文将详细介绍这些加密技术,并结合...

    JAVA加密技术.docx

    在Java编程中,加密技术是确保信息安全的关键组成部分。本文将探讨几种常见的加密算法,包括单向加密和对称及非对称加密算法。首先,我们来看基础的单向加密算法,如BASE64、MD5、SHA和HMAC。 **BASE64** 是一种...

    Java加密技术

    总的来说,Java加密技术提供了丰富的加密选项,PBE则提供了一种基于用户密码的简便加密方式,适合在各种场景下保护敏感数据。然而,使用加密技术时,必须时刻关注算法的安全性和最新安全实践,确保数据的长期安全性...

    Java加密技术(一)

    总之,Java加密技术提供了丰富的工具和算法,可以帮助开发者构建安全的应用程序。然而,随着技术的发展,加密算法的安全性也需要不断更新,以抵御新的攻击手段。在设计系统时,应考虑最新的安全标准和最佳实践,确保...

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

    本文将深入探讨几种常见的加密算法——DES、AES、PBE、DH、RSA以及ElGamal,并结合DataServlet实例来阐述如何在实际应用中使用这些算法。 首先,DES(Data Encryption Standard)是一种对称加密算法,使用56位的...

    JAVA对称加密算法PBE定义与用法实例分析

    JAVA对称加密算法PBE定义与用法实例分析 JAVA对称加密算法PBE(Password Based Encryption,即基于口令加密)是一种常用的加密算法,它通过将口令转换为密钥,然后使用该密钥对数据进行加密。PBE算法优点在于可以...

    Java十大加密算法(对称与非对称)

    Java作为一种广泛使用的开发语言,提供了丰富的加密库来支持各种加密算法。以下将详细介绍标题和描述中提到的Java加密算法,并结合给定的文件名,讨论具体实现。 1. **AES(Advanced Encryption Standard)**:高级...

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

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

    Java加密技术全集

    Java加密技术涵盖了各种加密算法,包括单向加密和双向加密,以及数字证书的使用。本文主要探讨了Java中实现的一些基础加密方法,如BASE64、MD5、SHA和HMAC。 1. BASE64编码:BASE64并不是一种加密算法,而是一种...

    Java加密技术介绍.docx

    ### Java加密技术详解 ...通过这些章节的介绍,我们可以看到Java加密技术的广度和深度,涵盖了从简单的编码格式到复杂的非对称加密算法。这些技术不仅对于软件开发至关重要,也是现代互联网安全的基础。

Global site tag (gtag.js) - Google Analytics