1. 程式人生 > >3DES加解密工具類

3DES加解密工具類



package test;

import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;

import org.apache.commons.lang.StringUtils;

import com.sun.org.apache.xml.internal.security.utils.Base64;

/**
 * @author guoxk
 *
 * @version 建立時間2017年5月23日
 *
 * 類描述:3DES加密工具類
 */
public class DES3 {
	private final static String encoding = "UTF-8";

	/**
	 * 方法描述:3DES加密
	 * @author guoxk
	 * @createTime 2017年5月23日 上午9:03:44
	 *
	 * @param plainText  明文
	 * @param secretKey  金鑰
	 * @param iv         加密向量
	 * @return String    密文
	 * @throws Exception
	 */
	public static String encode(String plainText, String secretKey, String iv)
			throws Exception {
		Key deskey = null;
		DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());
		SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
		deskey = keyfactory.generateSecret(spec);
		Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
		IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
		cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
		byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding));
		return Base64.encode(encryptData);
	}

	/**
	 * 方法描述: 3DES解密
	 * @author guoxk
	 * @createTime 2017年5月23日 上午9:04:37
	 *
	 * @param encryptText 密文
	 * @param secretKey   金鑰
	 * @param iv          加密向量
	 * @return String     明文
	 * @throws Exception
	 */
	public static String decode(String encryptText, String secretKey, String iv)
			throws Exception {
		if (StringUtils.isBlank(encryptText) || StringUtils.isBlank(secretKey)) {
			return "";
		}
		Key deskey = null;
		DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());
		SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
		deskey = keyfactory.generateSecret(spec);
		Cipher cipher = Cipher.getInstance("desede/CBC/NoPadding");
		IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
		cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
		byte[] decryptData = cipher.doFinal(Base64.decode(encryptText));
		return new String(decryptData, encoding).trim();
	}
	/**
	 * 方法描述:測試方法
	 * @author guoxk
	 * @createTime 2017年5月23日 上午9:12:24
	 *
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			String key = "4SF6BJ3D8TDOT8NOCZ8T7P1K";
			String iv = "13002542";//IV length must be 8 bytes long
			//加密
			String encryptStr = DES3.encode("明文", key, iv);
			System.out.println(encryptStr);
			//解密
			String decryptStr = DES3.decode(encryptStr, key, iv);
			System.out.println(decryptStr);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


jar包:jar包