www.pudn.com > DestTest.rar > NewTEST.java


package com.des.test; 
 
import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.DESedeKeySpec; 
import javax.crypto.spec.SecretKeySpec; 
 
import sun.misc.BASE64Decoder; 
import sun.misc.BASE64Encoder; 
import javax.crypto.KeyGenerator; 
 
public class NewTEST 
{ 
 
	public static void main(String[] args) 
	{ 
		String key_String = "3343k"; 
		String src_String = "5555555555"; 
		String des_String = ""; 
		String new_Src = null; 
		try 
		{ 
			des_String = desEncrypt(key_String, src_String); 
		} catch (Exception e) 
		{ 
			// TODO Auto-generated catch block 
			e.printStackTrace(); 
		} 
		System.out.println(des_String); 
		try 
		{ 
			new_Src = desDecrypt(key_String, des_String); 
			System.out.println("new_Src::" + new_Src); 
		} catch (Exception e) 
		{ 
			// TODO Auto-generated catch block 
			e.printStackTrace(); 
		} 
 
		System.out.println(new_Src); 
		try 
		{ 
			String dd = desDecrypt(key_String, des_String); 
			System.out.println("ddddddddd  " + dd + "  dddddddddddd"); 
		} catch (Exception e) 
		{ 
			// TODO Auto-generated catch block 
			e.printStackTrace(); 
		} 
 
	} 
 
	// 进行3DES加密 
	public static String desEncrypt(String key_string, String src_string) 
			throws Exception 
	{ 
 
		// 生成DES密钥 
		SecretKey deskey; 
		// 加密后的密文 
		String des_String; 
		// 判断密钥的长度,如果不是24位,则以"0"补齐 
		String zeros = "                        "; 
		if (key_string != null) 
		{ 
			int keylength = key_string.length(); 
			if (keylength < 24) 
			{ 
				key_string += zeros.substring(keylength); 
			} 
		} else 
		{ 
			return null; 
		} 
		byte key_byte[] = key_string.getBytes(); // 
		// 3DES 24 
		System.out.println("key_string::::::::::" + key_string); 
		deskey = getDESKey(key_byte); 
 
		Cipher cipher = Cipher.getInstance("DESede", "SunJCE"); 
		cipher.init(Cipher.ENCRYPT_MODE, deskey); 
 
		byte srt_byte[] = src_string.getBytes(); 
		// des_String = new String(cipher.doFinal(srt_byte)); 
		// BASE64转码 
		byte[] by = cipher.doFinal(); 
		StringBuffer sb = new StringBuffer(); 
		for (int i = 0; i < by.length; i++) 
		{ 
			sb.append(by[i]); 
		} 
		System.out.println("sb.toString():::::::" + sb.toString()); 
		System.out.println("by:::::::" + new String(by, "GBK")); 
		System.out.println("srt_byte::::::::" + cipher.doFinal(srt_byte)); 
		des_String = base64Encode(cipher.doFinal(srt_byte)); 
		return des_String; 
	} 
 
	// 进行3DES解密 
	public static String desDecrypt(String key_string, String des_string) 
			throws Exception 
	{ 
 
		// 生成DES密钥 
		SecretKey deskey; 
		// 未解密的明文 
		String desede_String; 
		// 解密后的明文 
		String src_String; 
		// 判断密钥的长度,如果不是24位,则以"0"补齐 
		String zeros = "                        "; 
		if (key_string != null) 
		{ 
			int keylength = key_string.getBytes().length; 
			System.out.println("keylength:" + keylength); 
			if (keylength < 24) 
			{ 
				key_string += zeros.substring(keylength); 
			} 
		} else 
		{ 
			return null; 
		} 
		BASE64Encoder base64Encoder = new BASE64Encoder(); 
 
		// String base_keyStrng=base64Encoder.encode(key_string.getBytes()); 
		// System.out.println("base_keyStrng:"+base_keyStrng); 
		byte key_byte[] = key_string.getBytes(); // 
		// 3DES 24 
		System.out.println("key_byte:" + key_byte.length); 
		deskey = getDESKey(key_byte); 
 
		Cipher cipher = Cipher.getInstance("DESede", "SunJCE"); 
		cipher.init(Cipher.DECRYPT_MODE, deskey); 
 
		BASE64Decoder base64Decoder = new BASE64Decoder(); 
		base64Decoder.decodeBuffer(des_string); 
		byte srt_byte[] = base64Decode(des_string); 
 
		// BASE64转码 
		// src_String = new String(cipher.doFinal(base64Decoder 
		// .decodeBuffer(des_string))); 
		src_String = new String(cipher.doFinal(srt_byte)); 
		return src_String; 
	} 
 
	/** 
	 * 生成3DES密钥. 
	 *  
	 * @param key_byte 
	 *            seed key 
	 * @throws Exception 
	 * @return javax.crypto.SecretKey Generated DES key 
	 */ 
	public static SecretKey getDESKey(byte[] key_byte) throws Exception 
	{ 
		SecretKey k = null; 
		k = new SecretKeySpec(key_byte, "DESede"); 
 
		DESedeKeySpec keySpec = new DESedeKeySpec(key_byte); 
 
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); 
		SecretKey key = keyFactory.generateSecret(keySpec); 
		return key; 
	} 
 
	/* 
	 * 对普通字符串进行BASE64转码 srcString :普通字符串 
	 */ 
	public static String base64Encode(byte[] srcString)// 加base64 
	{ 
		BASE64Encoder base64Encoder = new BASE64Encoder(); 
		try 
		{ 
			// 经过BASE64加密后的密文 
			String base64String = base64Encoder.encode(srcString); 
			return base64String; 
		} catch (Exception e) 
		{ 
			e.printStackTrace(); 
			return null; 
		} 
	} 
 
	/* 
	 * 将BASE64字符串解码 base64String:BASE64字符串 
	 */ 
	public static byte[] base64Decode(String base64String)// 解base64 
	{ 
		BASE64Decoder base64Decoder = new BASE64Decoder(); 
		try 
		{ 
 
			// 将BASE64转码过的字符串进行解码,获取明文 
			byte[] src_byte = base64Decoder.decodeBuffer(base64String); 
			return src_byte; 
		} catch (Exception e) 
		{ 
			e.printStackTrace(); 
			return null; 
		} 
	} 
 
}