PBE算法简介
PBE(Password Based Encryption,基于口令加密)是一种基于口令的加密算法 ,其特点是使用口令代替了密钥,而口令由用户自己掌管,采用随机数杂凑多重加密等方法保证数据的安全性。PBE算法在加密过程中并不是直接使用口令来加密,而是加密的密钥由口令生成,这个功能由PBE算法中的KDF函数完成。KDF函数的实现过程为:将用户输入的口令首先通过“盐”(salt)的扰乱产生准密钥,再将准密钥经过散列函数多次迭代后生成最终加密密钥,密钥生成后,PBE算法再选用对称加密算法对数据进行加密,可以选择DES、3DES、RC5等对称加密算法。
PBE算法实现
package com.jianggujin.codec;
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;
/**
* Password-based encryption(基于密码加密)
*
* @author jianggujin
*
*/
public class HQPBE
{
private static HQPBE pbe = new HQPBE();
public static HQPBE getInstance ()
{
return pbe;
}
private HQPBE ()
{
}
/**
* PBE算法
*
* @author jianggujin
*
*/
public static enum HQPBEAlgorithm
{
PBEWithMD5AndDES("PBEWithMD5AndDES" ), PBEWithSHA1AndDESede("PBEWithSHA1AndDESede" ), PBEWithSHA1AndRC2_40(
"PBEWithSHA1AndRC2_40" );
private String name;
private HQPBEAlgorithm (String name)
{
this .name = name;
}
public String getName ()
{
return this .name;
}
}
/**
* 初始化盐
*
* @return
*/
public byte [] initSalt ()
{
byte [] salt = new