java - 将 SecureRandom 和 UUID 转换为 int (java)?

标签 java unique uuid

我在接受字符串(一个人的名字)并返回一个唯一的整数时遇到问题,它不断地通过 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/

相关文章:

go - 如何在golang中切割uuid?

java - Java 中空 ("nil") UUID 的实例

Java:将图像添加到JTable?

java - 如何在 | 上拆分字符串Java 中的(管道)

mongodb - 数据库条目的高效唯一 key 生成

java - 创建不同唯一字符串值到指定范围的唯一整数值​​的映射

c# - MongoDb:用ruby插入UUID后,c#无法将其转换为GUID

java - 是否可以使用其他一些类,例如 awt 中的某些类或 codenameone 中的 swing

java - Java 7 中的客户端 TLS session 票证支持

javascript - 使用 javascript cookie 识别访客进行调查