我在接受字符串(一个人的名字)并返回一个唯一的整数时遇到问题,它不断地通过 catch 函数,我不知道为什么,除了我编写 SecureRandom 的方式不起作用,但是这很令人困惑。我对编程很陌生,所以请多多关照!
public static int uinqueID(String name){
try{
SecureRandom srA = SecureRandom.getInstance(name);
Integer randomA = new Integer(srA.nextInt());
System.out.println(randomA);
UUID uuidA = UUID.randomUUID();
String randomNum2 = uuidA.toString();
System.out.println(randomNum2);
int randomB = Integer.valueOf(randomNum2);
int uniqueID = randomA + randomB;
return uniqueID;
} catch(NoSuchAlgorithmException e) {
System.err.println("I failed");
}
return -1;
}
我得到的输出是: 我失败了 -1
感谢您的帮助!
最佳答案
您不能使用该人的姓名来获取 SecureRandom 对象。它需要随机数生成器实现中的名称。您可以使用“SHA1PRNG”,因为它是默认可用的。然后,您可以使用 name.getBytes() 为随机生成器播种,然后获取下一个随机数。
来自 Javadoc:
public static SecureRandom getInstance(字符串算法) 抛出 NoSuchAlgorithmException 生成一个 SecureRandom 对象,...snip...
参数: 算法 - PRNG 算法的名称。有关标准 PRNG 算法名称的信息,请参阅 Java 加密体系结构 API 规范和引用中的附录 A。
返回: 新的 SecureRandom 对象。 throw : NoSuchAlgorithmException - 如果 PRNG 算法在调用者的环境中不可用。 自从: 1.2
您可以跳过其余部分,因为哈希值与算法一样好,向其中添加其他内容很难使其更安全。
类似于:
static int getUUID(String name) throws NoSuchAlgorithmException {
SecureRandom srA = SecureRandom.getInstance("SHA1PRNG");
srA.setSeed(name.getBytes());
return new Integer(srA.nextInt());
}
我通常会使用 MessageDigest,但我必须承认这非常严格。
关于java - 将 SecureRandom 和 UUID 转换为 int (java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579191/