package com.glodon.paas.coqui.util;
import java.security.MessageDigest;
public class TokenGenerator {
private final static String[] md5Chars = {"0","1" ,"2" ,"3" ,"4" ,"5" ,"6" ,"7" ,"8" ,"9" ,"A" ,"B" ,"C" ,"D" ,"E" ,"F" };
public static String generate(String str) {
// 可以自定义生成MD5加密字符传前的混合KEY
String key = "glodoncloud";
// 要使用生成URL的字符
String[] chars = new String[] { "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h",
"i", "j" , "k" , "l" , "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t",
"u", "v" , "w" , "x" , "y" , "z" , "0" , "1" , "2" , "3" , "4" , "5",
"6", "7" , "8" , "9" , "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H",
"I", "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T",
"U", "V" , "W" , "X" , "Y" , "Z"
};
// 对传入网址进行MD5加密
String hex = encodeByMD5(key+str);
String[] resUrl = new String[4];
for (int i = 0; i < 4; i++) {
// 把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算
long hexint = Long.valueOf( "3FFFFFFF", 16) & Long.valueOf( hex.substring(i * 8,(i+1)*8), 16);
String outChars = "";
for (int j = 0; j < 6; j++) {
// 把得到的值与0x0000003D进行位与运算,取得字符数组chars索引
int index = (int) (Long.valueOf ("0000003D" , 16) & hexint);
// 把取得的字符相加
outChars += chars[index];
// 每次循环按位右移5位
hexint = hexint >> 5;
}
// 把字符串存入对应索引的输出数组
resUrl[i] = outChars;
}
return resUrl[0];
}
/**对字符串进行MD5编码*/
private static String encodeByMD5(String originString){
if (originString!=null) {
try {
//创建具有指定算法名称的信息摘要
MessageDigest md5 = MessageDigest. getInstance("MD5");
//使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
byte[] results = md5.digest(originString.getBytes());
//将得到的字节数组变成字符串返回
String result = byteArrayToHexString(results);
return result;
} catch (Exception e) {
e.printStackTrace();
}
}
return null ;
}
/**
* 轮换字节数组为十六进制字符串
* @param b 字节数组
* @return 十六进制字符串
*/
private static String byteArrayToHexString(byte[] b){
StringBuffer resultSb = new StringBuffer();
for(int i=0;i<b.length;i++){
resultSb.append( byteToHexString(b[i]));
}
return resultSb.toString();
}
private static String byteToHexString(byte b){
int n = b;
if(n<0)
n=256+n;
int d1 = n/16;
int d2 = n%16;
return md5Chars [d1] + md5Chars[d2];
}
public static void main(String[] args){
System. out.println(TokenGenerator.generate(UUIDUtil. getUUIDStr()));;
}
}
short url 算法
最新推荐文章于 2022-07-20 14:58:52 发布