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
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; |
|
} |
|
|
|
} |