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