码迷,mamicode.com
首页 > 编程语言 > 详细

对称算法--PBE

时间:2015-04-25 12:19:41      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:解密   数据   验证码   加密   

1.用到的jar包:http://pan.baidu.com/s/1mgIbLvq提取码:ytj9

2.用法技术分享技术分享



3。代码实现:

package com.tan.sucurity;

import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

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

import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.asn1.pkcs.PBEParameter;

/**
 * 功能:PEB算法
 * @author TanZi
 * @time 2015年4月25日 上午10:05:40
 */
public class MyPBE {

	public static void main(String[] args) {
		
		//初始化盐
		SecureRandom random=new SecureRandom();
		byte[] salt=random.generateSeed(8);
		MyPBE myPBE=new MyPBE();
		byte[] result=myPBE.EncryptPBE("tanzi", "nihao",salt);
		System.out.println("加密:"+Base64.encodeBase64String(result));
		result=myPBE.DecryptPBE("tanzi", result,salt);
		System.out.println("解密:"+new String(result));
	}
    
	/**
	 * 功能:获取一个Key
	 * @param password
	 * @return
	 */
	public Key toKey(String password){
		Key key=null;
		try {
			PBEKeySpec pbeKeySpec=new PBEKeySpec(password.toCharArray());
			SecretKeyFactory factory=SecretKeyFactory.getInstance("PBEWITHMD5andDES");
			key=factory.generateSecret(pbeKeySpec);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return key;
	}
	/**
	 * 功能:解密
	 * @param password 口令
	 * @param result  加密数据
	 * @param salt   盐
	 * @return     
	 */
	public byte[] DecryptPBE(String password,byte[] result,byte[] salt){
		try {
			Key key=toKey(password);
			PBEParameterSpec pbeParameterSpec=new PBEParameterSpec(salt, 100);
			Cipher cipher=Cipher.getInstance("PBEWITHMD5andDES");
			cipher.init(Cipher.DECRYPT_MODE, key, pbeParameterSpec);
			result=cipher.doFinal(result);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
	
	
	/**
	 * 功能:对数据的加密
	 * @param password 口令
	 * @param src      要加密的数据
	 * @param salt     盐
	 * @return
	 */
	public byte[] EncryptPBE(String password,String src,byte[] salt){
		
		 byte[] result=null;
		//口令与密钥
		PBEKeySpec pbeKeySpec=new PBEKeySpec(password.toCharArray());
		try {
			SecretKeyFactory factory=SecretKeyFactory.getInstance("PBEWITHMD5andDES");
		    Key key=factory.generateSecret(pbeKeySpec);
		    
		    //加密
		    PBEParameterSpec pbeParameterSpec=new PBEParameterSpec(salt, 100);
		    Cipher cipher=Cipher.getInstance("PBEWITHMD5andDES");
		    cipher.init(Cipher.ENCRYPT_MODE, key,pbeParameterSpec);
		    result=cipher.doFinal(src.getBytes());		   
		    
		} catch (Exception e) {
			e.printStackTrace();
		}
		 return result;
		
	}
}





对称算法--PBE

标签:解密   数据   验证码   加密   

原文地址:http://blog.csdn.net/u011707402/article/details/45267997

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!