如何创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]);