许可证密钥生成器冲突概率
License Key Generator Probability of Collision
我编写了生成许可证密钥的代码。
*必须是A-Z或0-9(36种可能)
*前4位始终为MKDC,后16位随机生成
我想了解如何计算冲突概率(2 个生成的许可证相同)。
public class Random {
public static void main(String[] args) {
String licensestring = "MKDC-";
char license[] = {
'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'
};
int x = 0;
while (x < 16){
java.security.SecureRandom rand = new java.security.SecureRandom();
int randomNumber = rand.nextInt(36);
licensestring = licensestring + license[randomNumber];
x = x + 1;
if (x == 4 || x == 8 || x == 12){
licensestring = licensestring + "-";
}
}
System.out.println(licensestring);
}
}
我说答案是 (1/36)^16 是不是过于简单化了?
对于两个生成的许可证,一个的可变字符必须与另一个的可变字符匹配。这等于
的概率
这个值大约是 0.00000000000000000000000125。
但是,对于多个许可证,概率会增加。对于 n 个许可证,概率为:
密钥 space 非常大,Wolfram|alpha 是 unable to determine 使用当前方法对合理数量的密钥的碰撞概率。
我编写了生成许可证密钥的代码。
*必须是A-Z或0-9(36种可能)
*前4位始终为MKDC,后16位随机生成
我想了解如何计算冲突概率(2 个生成的许可证相同)。
public class Random {
public static void main(String[] args) {
String licensestring = "MKDC-";
char license[] = {
'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'
};
int x = 0;
while (x < 16){
java.security.SecureRandom rand = new java.security.SecureRandom();
int randomNumber = rand.nextInt(36);
licensestring = licensestring + license[randomNumber];
x = x + 1;
if (x == 4 || x == 8 || x == 12){
licensestring = licensestring + "-";
}
}
System.out.println(licensestring);
}
}
我说答案是 (1/36)^16 是不是过于简单化了?
对于两个生成的许可证,一个的可变字符必须与另一个的可变字符匹配。这等于
的概率这个值大约是 0.00000000000000000000000125。
但是,对于多个许可证,概率会增加。对于 n 个许可证,概率为:
密钥 space 非常大,Wolfram|alpha 是 unable to determine 使用当前方法对合理数量的密钥的碰撞概率。