package com.moral.util;
|
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* @ClassName TokenEncryptUtils
|
* @Description token加密、解密工具
|
* @Author 陈凯裕
|
* @Date 2021/3/10 11:50
|
* @Version TODO
|
**/
|
@Component
|
public class TokenEncryptUtils {
|
|
private static String key;
|
|
@Value("${TOKEN.KEY}")
|
public void setKey(String tokenKey){
|
this.key = tokenKey;
|
}
|
|
/**
|
* 加密
|
* @param str
|
* @return
|
*/
|
public static String encoded(String str) {
|
return strToHex(encodedString(str, key));
|
}
|
|
|
/**
|
* @Description: 解密
|
* @Param: [str]
|
* @return: java.lang.String
|
* @Author: 陈凯裕
|
* @Date: 2021/3/10
|
*/
|
public static String decoded(String str) {
|
String hexStr = null;
|
try {
|
hexStr = hexStrToStr(str);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
if (hexStr != null) {
|
hexStr = encodedString(hexStr, key);
|
}
|
return hexStr;
|
}
|
|
/**
|
* 转换
|
* @param str
|
* @param password
|
* @return
|
*/
|
private static String encodedString(String str, String password) {
|
char[] pwd = password.toCharArray();
|
int pwdLen = pwd.length;
|
|
char[] strArray = str.toCharArray();
|
for (int i=0; i<strArray.length; i++) {
|
strArray[i] = (char)(strArray[i] ^ pwd[i%pwdLen] ^ pwdLen);
|
}
|
return new String(strArray);
|
}
|
|
/**
|
* @Description: 16进制转换字符串
|
* @Param: [hexStr]
|
* @return: java.lang.String
|
* @Author: 陈凯裕
|
* @Date: 2021/3/10
|
*/
|
private static String hexStrToStr(String hexStr) {
|
return new String(hexStrToBytes(hexStr));
|
}
|
|
/**
|
* @Description: 16进制字符串转换字节数组
|
* @Param: [hexStr]
|
* @return: byte[]
|
* @Author: 陈凯裕
|
* @Date: 2021/3/10
|
*/
|
private static byte[] hexStrToBytes(String hexStr) {
|
String hex;
|
int val;
|
byte[] btHexStr = new byte[hexStr.length()/2];
|
for (int i=0; i<btHexStr.length; i++) {
|
hex = hexStr.substring(2*i, 2*i+2);
|
val = Integer.valueOf(hex, 16);
|
btHexStr[i] = (byte) val;
|
}
|
return btHexStr;
|
}
|
|
/**
|
* @Description: 字节数组转换16进制字符串
|
* @Param: [bytesArray]
|
* @return: java.lang.String
|
* @Author: 陈凯裕
|
* @Date: 2021/3/10
|
*/
|
private static String bytesToHexStr(byte[] bytesArray) {
|
StringBuilder builder = new StringBuilder();
|
String hexStr;
|
for (byte bt : bytesArray) {
|
hexStr = Integer.toHexString(bt & 0xFF);
|
if (hexStr.length() == 1) {
|
builder.append("0");
|
builder.append(hexStr);
|
}else{
|
builder.append(hexStr);
|
}
|
}
|
return builder.toString();
|
}
|
|
/**
|
* @Description: 字符串转为16进制
|
* @Param: [s]
|
* @return: java.lang.String
|
* @Author: 陈凯裕
|
* @Date: 2021/3/10
|
*/
|
private static String strToHex(String s) {
|
return bytesToHexStr(s.getBytes());
|
}
|
|
public static void main(String[] args) {
|
long currentTime = System.currentTimeMillis();
|
System.out.println("加密前的token:"+"25."+currentTime);
|
String token = encoded("25" +"/"+ currentTime);
|
String[] decoded = decoded(token).split("/");
|
System.out.println("生成的token:"+token);
|
for (String s : decoded) {
|
System.out.println("解析后的token:"+s);
|
}
|
}
|
|
}
|