我希望能够在Java中生成随机标识符。该标识符应具有固定大小,并且生成相同标识符的概率应非常低(系统中约有500,000个用户)。此外,标识符应足够长,以致于无法通过暴力攻击“猜测”它。
到目前为止,我的方法大致如下:
我会在数据库中的约束条件中强制唯一性。如果我遇到已经创建的标识符,我就会继续生成,直到找到一个未被使用的为止。
我的假设是,我可以调整字母表长度和长度来获得我正在寻找的属性:
1. 碰撞很少发生; 2. 无法通过暴力破解获取; 3. 标识符应尽可能短,因为系统的用户必须输入它。
这种方法好吗?有没有人对“长度”的价值有什么想法?
到目前为止,我的方法大致如下:
String alphabet = "0123456789ABCDE....and so on";
int lengthOfAlphabet = 42;
long length = 12;
public String generateIdentifier(){
String identifier = "";
Random random = new Random();
for(int i = 0;i<length;i++){
identifier+= alphabet.charAt(random.nextInt(lengthOfAlphabet));
}
return identifier;
}
我会在数据库中的约束条件中强制唯一性。如果我遇到已经创建的标识符,我就会继续生成,直到找到一个未被使用的为止。
我的假设是,我可以调整字母表长度和长度来获得我正在寻找的属性:
1. 碰撞很少发生; 2. 无法通过暴力破解获取; 3. 标识符应尽可能短,因为系统的用户必须输入它。
这种方法好吗?有没有人对“长度”的价值有什么想法?
UUID.randomUUID()
有什么问题?它是否太长了?它可以转换为更短的内容,例如在base 64中编码。 - Marko Topolnik