You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.5 KiB
120 lines
3.5 KiB
3 years ago
|
package com.fr.plugin.tools;
|
||
|
|
||
|
|
||
|
import com.fanruan.api.log.LogKit;
|
||
|
import com.fr.plugin.UASSLOGINConfig;
|
||
|
|
||
|
import javax.crypto.Cipher;
|
||
|
import javax.crypto.SecretKey;
|
||
|
import javax.crypto.spec.SecretKeySpec;
|
||
|
import java.nio.charset.StandardCharsets;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
public class ToolDES {
|
||
|
//public final static String PRIVACY_KEY = WebContant.DES_PRIVACYKEY;
|
||
|
public final static String PRIVACY_KEY;
|
||
|
private static final String Algorithm = "DESede"; // 定义
|
||
|
private static final String encoding = "UTF8";
|
||
|
// 密钥
|
||
|
private static byte[] keyBytes = null;
|
||
|
|
||
|
static {
|
||
|
// String temp = "chinamobileimpgwandother" ;
|
||
|
PRIVACY_KEY = UASSLOGINConfig.getInstance().getSecret();
|
||
|
keyBytes = UASSLOGINConfig.getInstance().getSecret().getBytes(StandardCharsets.UTF_8);
|
||
|
}
|
||
|
|
||
|
// keybyte为加密密钥,长度为24字节
|
||
|
// src为被加密的数据缓冲区(源)
|
||
|
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.lang.Exception e) {
|
||
|
LogKit.error("", e);
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
// keybyte为加密密钥,长度为24字节
|
||
|
// src为加密后的缓冲区
|
||
|
public static byte[] decryptMode(byte[] keybyte, byte[] src) throws Exception {
|
||
|
|
||
|
// 生成密钥
|
||
|
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
|
||
|
|
||
|
// 解密
|
||
|
Cipher c1 = Cipher.getInstance(Algorithm);
|
||
|
c1.init(Cipher.DECRYPT_MODE, deskey);
|
||
|
return c1.doFinal(src);
|
||
|
}
|
||
|
|
||
|
// 转换成十六进制字符串
|
||
|
private static String byte2hexString(byte[] bytes) {
|
||
|
StringBuffer buf = new StringBuffer(bytes.length * 2);
|
||
|
for (int i = 0; i < bytes.length; i++) {
|
||
|
if (((int) bytes[i] & 0xff) < 0x10) {
|
||
|
buf.append("0");
|
||
|
}
|
||
|
buf.append(Long.toString((int) bytes[i] & 0xff, 16));
|
||
|
}
|
||
|
return buf.toString();
|
||
|
}
|
||
|
|
||
|
// 将十六进制字符串byte数组
|
||
|
private static byte[] hexString2byte(String hexString) {
|
||
|
if (hexString == null || hexString.length() % 2 != 0) {
|
||
|
return null;
|
||
|
}
|
||
|
byte[] hanzi = new byte[hexString.length() / 2];
|
||
|
for (int i = 0; i < hexString.length(); i += 2) {
|
||
|
hanzi[i / 2] = (byte) (Integer.parseInt(hexString.substring(i, i + 2), 16) & 0xff);
|
||
|
}
|
||
|
return hanzi;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 加密字符串
|
||
|
*
|
||
|
* @param src 源字符串
|
||
|
* @return 加密后的字符串
|
||
|
*/
|
||
|
public static String encrypt(String src) {
|
||
|
String key = PRIVACY_KEY;
|
||
|
String result = null;
|
||
|
if (src == null) {
|
||
|
return result;
|
||
|
}
|
||
|
try {
|
||
|
EncryptTool ent = new EncryptTool();
|
||
|
// 加密字符串
|
||
|
LogKit.debug("加密字符串:" + ent);
|
||
|
result = ent.encryptString(src, key);
|
||
|
|
||
|
} catch (Exception e) {
|
||
|
LogKit.error("Exception occurred while encrypting [ " + src + " ] ,key[" + key + "],", e);
|
||
|
return null;
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
public static byte[] getKeyBytes(String key) {
|
||
|
if (key != null && "".equals(key)) {
|
||
|
key = PRIVACY_KEY;
|
||
|
}
|
||
|
if (key != null) {
|
||
|
keyBytes = key.getBytes();
|
||
|
}
|
||
|
return keyBytes;
|
||
|
}
|
||
|
|
||
|
}
|