java 3DES加密、解密

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import com.shineyoo.manager.util.common.config.Global;

/**

  • 3DES加密

*/
public class ThreeDES {

private static final String Algorithm = "DESede"; // 定义 加密算法,可用DES,DESede,Blowfish  


// 加密入口,外部调用此方法
public static String encryptMode(String pass, String str) {
	try {
		byte[] resultByte = encryptMode(pass.getBytes(), str.getBytes());
		// 为了防止解密时报javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher异常,  
		// 不能把加密后的字节数组直接转换成字符串
		return Base64Utils.encode(resultByte);
	} catch (Exception e) {
		e.printStackTrace();
	}
	return null;
}

// 解密入口,外部调用此方法
public static String decryptMode(String pass, String str) {
	try {
		byte[] resultByte = decryptMode(pass.getBytes(), Base64Utils.decode(str.toCharArray()));
		return new String(resultByte,"UTF-8");
	} catch (Exception e) {
		e.printStackTrace();
	}
	return null;
}

/** 
 * 加密方法 
 *  
 * @param keybyte 
 *            加密密钥,长度为24字节 
 * @param src 
 *            被加密的数据缓冲区(源) 
 * @return  
 */  
public static byte[] encryptMode(byte[] keybyte, byte[] src) {  
	try {  
		// 生成密钥  
		SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);  

		// 加密  
		Cipher c1 = Cipher.getInstance(Algorithm);  
		c1.init(Cipher.ENCRYPT_MODE, deskey);  
		return c1.doFinal(src);  
	} catch (java.security.NoSuchAlgorithmException e1) {  
		e1.printStackTrace();  
	} catch (javax.crypto.NoSuchPaddingException e2) {  
		e2.printStackTrace();  
	} catch (java.lang.Exception e3) {  
		e3.printStackTrace();  
	}  
	return null;  
}  

/** 
 * 解密 
 *  
 * @param keybyte 
 *            加密密钥,长度为24字节 
 * @param src 
 *            加密后的缓冲区 
 * @return 
 */  
public static byte[] decryptMode(byte[] keybyte, byte[] src) {  
	try {  
		// 生成密钥  
		SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);  

		// 解密  
		Cipher c1 = Cipher.getInstance(Algorithm);  
		c1.init(Cipher.DECRYPT_MODE, deskey);  
		return c1.doFinal(src);  
	} catch (java.security.NoSuchAlgorithmException e1) {  
		e1.printStackTrace();  
	} catch (javax.crypto.NoSuchPaddingException e2) {  
		e2.printStackTrace();  
	} catch (java.lang.Exception e3) {  
		e3.printStackTrace();  
	}  
	return null;  
}  

/** 
 * 转换成十六进制字符串 
 *  
 * @param b 
 * @return 
 */  
public static 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();  
}  

/**
 * 测试以及调用
 * @Description: TODO
 */
public static void main(String[] args) {  

	String secret = "4^WJ9AGXogm2TOiMKy^LREg*";// Global.getConfig("trdDesKey");
	String szSrc2 = "2005477";
	String result = encryptMode(secret, szSrc2);
	System.out.println("加密后的结果:"+result);
	String result2 = decryptMode(secret, result);
	System.out.println("解密后的结果:"+result2);
}  

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值