【问题标题】:How to create an array of 20 random bytes?如何创建一个包含 20 个随机字节的数组?
【发布时间】:2011-08-06 16:39:18
【问题描述】:

如何在 Java 中创建一个包含 20 个随机字节的数组?

【问题讨论】:

    标签: java arrays random


    【解决方案1】:

    试试Random.nextBytes 方法:

    byte[] b = new byte[20];
    new Random().nextBytes(b);
    

    【讨论】:

    • 值得一提的是,这不是加密安全的。如果需要,请参阅other answer
    【解决方案2】:

    如果您想要一个加密强的随机数生成器(也是线程安全的)而不使用第三方 API,您可以使用SecureRandom

    Java 6 和 7:

    SecureRandom random = new SecureRandom();
    byte[] bytes = new byte[20];
    random.nextBytes(bytes);
    

    Java 8(更安全):

    byte[] bytes = new byte[20];
    SecureRandom.getInstanceStrong().nextBytes(bytes);
    

    【讨论】:

      【解决方案3】:

      如果您已经在使用 Apache Commons Lang,RandomUtils 将使其成为单行:

      byte[] randomBytes = RandomUtils.nextBytes(20);
      

      注意:这不会产生加密安全字节。

      【讨论】:

      【解决方案4】:

      Java 7 引入了ThreadLocalRandom,它与当前线程隔离

      这是maerics's solution 的另一个版本。

      final byte[] bytes = new byte[20];
      ThreadLocalRandom.current().nextBytes(bytes);
      

      【讨论】:

      • ThreadLocalRandom 后面的括号可能太多了?更好:ThreadLocalRandom.current().nextBytes(bytes);
      【解决方案5】:

      使用种子创建一个 Random 对象,并通过以下方式随机获取数组:

      public static final int ARRAY_LENGTH = 20;
      
      byte[] byteArray = new byte[ARRAY_LENGTH];
      new Random(System.currentTimeMillis()).nextBytes(byteArray);
      // get fisrt element
      System.out.println("Random byte: " + byteArray[0]);
      

      【讨论】:

        【解决方案6】:

        对于那些想要更安全的方法来创建随机字节数组的人来说,是的,最安全的方法是:

        byte[] bytes = new byte[20];
        SecureRandom.getInstanceStrong().nextBytes(bytes);
        

        但是如果机器上没有足够的随机性可用,您的线程可能会阻塞,具体取决于您的操作系统。以下解决方案不会阻塞:

        SecureRandom random = new SecureRandom();
        byte[] bytes = new byte[20];
        random.nextBytes(bytes);
        

        这是因为第一个示例使用 /dev/random 并且会在等待更多随机性(由鼠标/键盘和其他来源生成)时阻塞。第二个例子使用/dev/urandom,不会阻塞。

        【讨论】:

        • 只有在要求及时性而不是正确性的情况下,或者在这种情况下是真正的随机性时,才应该使用此示例。 /dev/urandom 如果不能创建真正的随机性,则不会阻塞,并且会尽力而为。 /dev/random 将阻塞直到随机性得到保证。
        猜你喜欢
        • 1970-01-01
        • 2015-05-12
        • 2016-09-23
        • 2018-04-14
        • 2023-04-11
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多