使用DES加密解密的工具类

 

一个工具类,很常用,不做深入研究了,那来可直接用

 

DesUtil.java

 

package lsy;

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class DesUtil {

	/**
	 * @param args
	 */ 
	public static void main(String[] args) {
		//以下是加密方法algorithm="AES"的测试
		
		System.out.println(DesUtil.getInstance("lushuaiyin").getEnCodeString("hello"));
		//输出  LDewGAZkmWHeYFjBz56ylw==
		//将上面的密文解密:
		System.out.println(DesUtil.getInstance("lushuaiyin").getDecodeString("LDewGAZkmWHeYFjBz56ylw=="));
		//输出   hello
		
		//改变密钥测试
		System.out.println(DesUtil.getInstance("suolong").getEnCodeString("hello"));
		//输出  /RLowOJ+Fr3KdMcdJeNatg==
		System.out.println(DesUtil.getInstance("suolong").getDecodeString("/RLowOJ+Fr3KdMcdJeNatg=="));
		//输出   hello
		
		//如果使用不正确的密钥解密,将会:
		System.out.println(DesUtil.getInstance("suolong").getDecodeString("LDewGAZkmWHeYFjBz56ylw=="));
		
	}
	
	private  SecretKey key=null;//密钥
	
	//定义 加密算法,可用 DES,DESede,Blowfish,AES 
	//不同的加密方式结果会不同
	private  static String algorithm="AES";

	private  static DesUtil desUtil=null;
	
	
	public DesUtil(){}
	
	public static DesUtil getInstance(String strKey){
		desUtil=new DesUtil();
		desUtil.createKey(strKey);
		return desUtil;
	}
    /**
     * algorithm 算法
     * @param strKey
     */
	public void createKey(String strKey){
		
		try{
			KeyGenerator kg=KeyGenerator.getInstance(DesUtil.algorithm);
			byte[] bt=strKey.getBytes("UTF-8");
			SecureRandom sr=new SecureRandom(bt);
			kg.init(sr);
			this.setKey(kg.generateKey());
		}catch(Exception e){
			
		}
	}
	/**
	 * 加密方法,返回密文
	 * cipher 密码
	 * @param dataStr
	 */
	public  String getEnCodeString(String dataStr){
		byte[] miwen=null;//密文
		byte[] mingwen=null;//明文
		Cipher cipher;
		String result="";//密文字符串
		try{
			mingwen=dataStr.getBytes("UTF-8");
			cipher=Cipher.getInstance(DesUtil.algorithm);
			cipher.init(Cipher.ENCRYPT_MODE, this.getKey());
			miwen=cipher.doFinal(mingwen);
			
			BASE64Encoder base64en = new BASE64Encoder(); 
			result=base64en.encodeBuffer(miwen);//或者可以用下面的方法得到密文,结果是不一样的,都可以正常解密
//			result=byte2hex(miwen);//密文结果类似2C:37:B0:18:06:64:99:61:DE:60:58:C1:CF:9E:B2:97
		}catch(Exception e){
			e.printStackTrace();
		}
		return result;
	}
	
	/**
	 * 解密方法,返回明文
	 * @param codeStr
	 * @return
	 */
	public  String getDecodeString(String codeStr){
		BASE64Decoder base64De = new BASE64Decoder();
		byte[] miwen=null;
		byte[] mingwen=null;
		String resultData="";//返回的明文
		Cipher cipher;
		try{
			miwen=base64De.decodeBuffer(codeStr);
			cipher=Cipher.getInstance(DesUtil.algorithm);
			cipher.init(Cipher.DECRYPT_MODE, this.getKey());
			
			mingwen=cipher.doFinal(miwen);
			resultData = new String(mingwen,"UTF-8");  
		}catch(Exception e){
			return "密钥不正确或其他原因导致异常,无法解密!";
		}
		
		return resultData;
	}
	
	 //二行制转字符串
	public String byte2hex(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1)
				hs = hs + "0" + stmp;
			else
				hs = hs + stmp;
			if (n < b.length - 1)
				hs = hs + ":";
		}
		return hs.toUpperCase();
	} 


	 
	public  SecretKey getKey() {
		return key;
	}
	public  void setKey(SecretKey key) {
		this.key = key;
	}
	public static String getAlgorithm() {
		return algorithm;
	}
	public static void setAlgorithm(String algorithm) {
		algorithm = algorithm;
	}
	
	
}


 

打印:

LDewGAZkmWHeYFjBz56ylw==

hello
/RLowOJ+Fr3KdMcdJeNatg==

hello
密钥不正确或其他原因导致异常,无法解密!

 

 

 

 

 

 

你可能感兴趣的:(Algorithm,exception,加密,String,解密,工具)