产生唯一值的三种方式:
UUID类: 表示通用唯一标识符的类,表示一个128位的值
MessageDigest类:为应用程序提供信息摘要算法的功能,如MD5或SHA算法(抽象类)
BASE64Encoder类jdk里面没有,手动引入:
package com.hcx.servlet;
import java.security.MessageDigest;
import java.util.UUID;
import sun.misc.BASE64Encoder;
//创建唯一值的三种方式
public class Test {
public static void main(String[] args) throws Exception{
//第一种方式
// Random r = new Random() ;
// for (int i = 0; i < 100; i++) {
// String n = System.nanoTime() + "" + r.nextInt(); //理论上存在重复的可能,实际上不会重复
// System.out.println(n) ;
// }
//第二种方式: 采用UUID类: 表示通用唯一标识符的类,表示一个128位的值
// for (int i = 0; i < 100; i++) {
// String s = UUID.randomUUID().toString() ;
// System.out.println(s);
// }
//前两种方式用户可以点击源码查看到内容再传递到服务器
//第三种方式: 采用数据指纹(理论和实际都是唯一的)
for (int i = 0; i < 100; i++) {
String s = UUID.randomUUID().toString() ;
//先进行md5加密
MessageDigest md = MessageDigest.getInstance("md5") ;
//对数据进行加密
byte[] bs = md.digest(s.getBytes()) ;
/**实现的原理:
* 三字节变四字节
* 00111100 01011010 00111110
* 00001111 00000101 00101000 00111110 每次取6位 不够补0
* 0000000 -00111111
* 0~63
*/
//采用数据指纹进一步加密,拿到的数据成为数据指纹
BASE64Encoder base = new BASE64Encoder() ;
//进一步进行加密
String str = base.encode(bs) ;
System.out.println(str);
}
}
}