short url 算法

来源:互联网 发布:淘宝没有代付选项 编辑:程序博客网 时间:2024/04/30 03:28
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()));;       }}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 组队领金币的码怎么办 cad画图时鼠标飘怎么办 玩迷你世界很卡怎么办 玩迷你世界太卡怎么办 迷你世界太卡了怎么办 把线稿画在背景里了怎么办 蜗牛在家里跑了怎么办 小孩总是跟大人犟嘴怎么办 鹅当宠物养拉屎怎么办 金毛肚子胀很大怎么办 被小白兔咬了怎么办 仓鼠养在家里有味怎么办 被宠物仓鼠咬了怎么办 2个月小狗拉稀怎么办 家有很多小飞虫怎么办 孩子不和父母微信交流怎么办 我孩子和我顶嘴怎么办 我属龙孩子属狗怎么办 宝宝呛奶怎么办伴呼噜 离婚了欠的债务怎么办 小鸟生长发育过程壳破了怎么办 经常嗓子发炎抵抗力低下怎么办 生完孩子出虚汗怎么办 3岁宝宝抵抗力差怎么办 5岁宝宝免疫力低怎么办 狗狗后腿o型怎么办 狗狗前腿内八字怎么办 小猫腿摔瘸了怎么办会好吗 小狗的腿断了怎么办 狗后腿摔瘸了怎么办 狗狗脖子挠破了怎么办 狗狗脖子挠破化脓怎么办 狗狗大腿骨折了怎么办啊 狗狗洗澡后拉稀怎么办 狗狗好像生病了怎么办 奶狗前腿断了怎么办 狗摔了一下瘸了怎么办 小狗腿突然瘸了怎么办 狗腿突然瘸了怎么办 狗腿受伤了肿了怎么办 狗狗缺钙腿变形怎么办