Answers:
尝试Random.nextBytes
方法:
byte[] b = new byte[20];
new Random().nextBytes(b);
如果您已经在使用Apache Commons Lang,那么 RandomUtils
这将成为一线手:
byte[] randomBytes = RandomUtils.nextBytes(20);
Java 7引入了ThreadLocalRandom,它与当前线程隔离。
这是铁道学解决方案的另一种形式。
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
吗?更好:ThreadLocalRandom.current().nextBytes(bytes);
创建一个带有种子的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]);
对于那些想要一种更安全的方法来创建随机字节数组的人,最安全的方法是:
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
不会阻塞的示例。