Как создать массив из 20 случайных байтов в Java?
Как создать массив из 20 случайных байтов?
Ответ 1
Попробуйте метод Random.nextBytes
:
byte[] b = new byte[20];
new Random().nextBytes(b);
Ответ 2
Если вы уже используете Apache Commons Lang, RandomUtils
делает это одним слоем:
byte[] randomBytes = RandomUtils.nextBytes(20);
Ответ 3
Если вам нужен криптографически сильный генератор случайных чисел (также потокобезопасный) без использования стороннего 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);
Ответ 4
Java 7 представила ThreadLocalRandom, который изолирован от текущего потока.
Это еще одно исполнение maerics solution.
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
Ответ 5
Создайте объект Случайный с семенем и получите массив случайным образом:
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
Я хотел посмотреть, как все об этом поразмышляют. Я использую его для шифрования io-пакетов через tcp.
//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]);