首页>代码>java Web开发完全跨域的SSO单点登录系统实例>/WebSSOAuth/src/com/ghsau/util/DESUtils.java
package com.ghsau.util;

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

/**
 * 3DES加密工具类
 */
public class DESUtils {
	
	/**
	 * 加密
	 * @param inStr 需要加密的内容
	 * @param secretKey 密钥
	 * @return 加密后的数据
	 */
	public static String encrypt(String inStr, String secretKey) {
		SecretKey deskey = new SecretKeySpec(secretKey.getBytes(), "DESede");
		Cipher cipher;
		String outStr = null;
		try {
			cipher = Cipher.getInstance("DESede");
			cipher.init(Cipher.ENCRYPT_MODE, deskey);
			outStr = byte2hex(cipher.doFinal(inStr.getBytes()));
		} catch (Exception e) {
			outStr = "default";
			System.err.println("3DES加密失败!加密内容[" + inStr + "]");
			e.printStackTrace();
		}
		return outStr;
	}
	
	/**
	 * 解密
	 * @param inStr 需要解密的内容
	 * @param secretKey 密钥
	 * @return 解密后的数据
	 */
	public static String decrypt(String inStr, String secretKey) {
		SecretKey deskey = new SecretKeySpec(secretKey.getBytes(), "DESede");
		Cipher cipher;
		String outStr = null;
		try {
			cipher = Cipher.getInstance("DESede");
			cipher.init(Cipher.DECRYPT_MODE, deskey);
			outStr = new String(cipher.doFinal(hex2byte(inStr)));
		} catch (Exception e) {
			outStr = "default";
			System.err.println("3DES解密失败!解密内容[" + inStr + "]");
			e.printStackTrace();
		}
		return outStr;
	}
	
	/**
	 * 转化为16进制字符串方法
	 * @param digest 需要转换的字节组
	 * @return 转换后的字符串
	 */
	public static String byte2hex(byte[] digest) {
		StringBuffer hs = new StringBuffer();
		String stmp = "";
		for (int n = 0; n < digest.length; n++) {
			stmp = Integer.toHexString(digest[n] & 0XFF);
			if (stmp.length() == 1) {
				hs.append("0" + stmp);
			} else {
				hs.append(stmp);
			}
		}
		return hs.toString().toUpperCase();
	}
	
	/**
	 * 十六进转二进制
	 * @param hexStr 待转换16进制字符串
	 * @return 二进制字节组
	 */
	public static byte[] hex2byte(String hexStr){
		if (hexStr == null)
			return null;
		hexStr = hexStr.trim();
		int len = hexStr.length();
		if (len == 0 || len % 2 == 1)
			return null;
		byte[] digest = new byte[len / 2];
		try {
			for (int i = 0; i < hexStr.length(); i += 2) {
				digest[i / 2] = (byte) Integer.decode("0x" + hexStr.substring(i, i + 2)).intValue();
			}
			return digest;
		} catch (Exception e) {
			return null;
		}
	}
	
	public static void main(String[] args) {
		String secretKey = "111111112222222233333333";
		System.out.println(encrypt("{patternID : '1001', raq : 'test.raq'}", secretKey));
		System.out.println(encrypt("{patternID : '0', username : 'zhangsan', password : '1'}", secretKey));
		System.out.println(encrypt("{patternID : '0', username : 'zhangsan', password : '2'}", secretKey));
	}
	
}
最近下载更多
wjh007  LV4 4月1日
zackery  LV9 1月27日
123xyz  LV2 2023年4月15日
ROCK森  LV12 2022年11月7日
49202046  LV7 2022年8月2日
wusiyin  LV14 2022年7月18日
a1677596408  LV23 2022年3月28日
jiaxiaoxinwork  LV1 2021年12月16日
荒唐的羊  LV27 2021年1月14日
15947813008  LV5 2020年11月16日
最近浏览更多
wjh007  LV4 4月1日
asddwh  LV12 2023年12月26日
徐万强  LV9 2023年7月25日
123xyz  LV2 2023年4月10日
Muling  LV8 2023年2月6日
ROCK森  LV12 2022年11月7日
wjh12345654321  LV14 2022年9月14日
49202046  LV7 2022年8月2日
wusiyin  LV14 2022年7月18日
凉冰丶  LV7 2022年6月18日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友