UUID和MD5加盐生成token令牌

**

1、UUID简介

**
https://baike.baidu.com/item/UUID/5921266 UUID

UUID样例:
d0e75c11-51ba-4d90-b1bf-7970d37367cd(36位)

https://blog.csdn.net/qq_36264455/article/details/88579444 MD5加盐浅见

**

2、MD5加盐实例:生成taken令牌

**

public Map generateToken(String inputPids){
	String salt="20191221";
	//生成推荐位的密钥16位
	Map<String,String> resultMap = new HashMap<>();
	for(String p:inputPids.split(",")){
		String token = Md5Utils.getMdStr16(p,salt);
		resultMap.put(p,token);	
	}
}
/**
* 获取16位md5字符串
* @param phrase 短语串
*/

public static String getMd5Str16(String phrase){

	if(phrase == null){
		return null;
	}

	MessageDigest digest;
	try{
		digest = MessageDigest.getInstance("md5");
	}catch(NoSuchAlgorithmException e){
		return null;
	}
	//phrase.getBytes()返回的是asci十进制的编码
	//hash散列算法,返回一个十进制的byte数组
	byte[] bs = digest.digest(phrase.getBytes());
	String hexString = "";
	for(byte b:bs){
		//如果b为负数,则跟255相加得出的就是对应的十进制值(asci十进制范围是从0-255没有负值)
		int temp = b & 255;
		//根据temp哈希编码根据asci将编码从十进制转换成16进制
		if(temp<16&&temp>=0){
		    //asci码0-16位是一个字符,需要补齐加0
			hexString = hexString + "0" + Integer.toHexString(temp);
		}else{
			hexString = hexString + Integer.toHexString(temp);
		}
	}
	return hexString.substring(8,24);
}

这个实例中把获取到的字符串是用时间戳进行的加盐,然后再通过String的getBytes()方法将获取字符串对应的编码,

相关链接:http://blog.itpub.net/28932681/viewspace-2286124/ String的getBytes()方法

https://www.jianshu.com/p/decc4dda9153 Java 自带的加密类MessageDigest类(加密MD5和SHA)

https://www.cnblogs.com/yxwkf/p/4002338.html MessageDigest加密详解

https://blog.csdn.net/u013615806/article/details/44422055/ public static String toHexString(int i)方法

https://www.cnblogs.com/shuaiding/p/11124974.html java运算符号&意思
https://blog.csdn.net/weixin_33769207/article/details/93604469 java位于运算符

https://www.jianshu.com/p/d3a03fcb7f56 MD5 16位和32位区别

https://blog.csdn.net/yueyueniaolzp/article/details/82178954
史上最全ASCII码对照表0-255(%d)

**

3、MD5加密逻辑

**
MD5将一个任意长度的数据经过编码得到一个128位(16字节)的哈希值,即为MD5值:
在这里要明确一个换算公式:
1字节=8位二进制
一个16进制=4位二进制
128/8=16=》所以上面的128位(16字节)可以解释为128个二进制等于16字节
128/4=32 这就是128个二进制转换为16进制就成了32位 所以我们看到MD5加密后的都是16进制的32位数

你可能感兴趣的:(知识点)