如何创build一个20个随机字节的数组?

如何在Java中创build20个随机字节的数组?

尝试Random.nextBytes方法:

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

如果您已经在使用Apache Commons Lang,那么RandomUtils将会使其成为一行:

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

如果你想要一个密码强的随机数生成器(也是线程安全的),而不使用第三方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); 

Java 7引入了与当前线程隔离的 ThreadLocalRandom 。

这是maerics的解决scheme的另一个翻版 。

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

用一个种子创build一个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]); 

我想看看大家对此感觉如何 我正在使用它通过tcp来encryptionio数据包。

 //class private static ThreadLocal<SecureRandom> ThreadLocalSecureRandom = null; public static SecureRandom get ( ) { if ( ThreadLocalSecureRandom == null ) { ThreadLocalSecureRandom = new ThreadLocal<>(); } return ThreadLocalSecureRandom.get(); } //usage byte[][] InitialVector = new byte[2][4]; ThreadLocalSecureRandom.get().nextBytes(InitialVector[0]); ThreadLocalSecureRandom.get().nextBytes(InitialVector[1]);