Как я могу создать массив из 20 случайных байтов в Java?
130
Попробуйте 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 .
источник
ThreadLocalRandom
? Лучше:ThreadLocalRandom.current().nextBytes(bytes);
Создайте объект Random с семенем и получите массив случайным образом, выполнив:
источник
Для тех, кто хочет более безопасный способ создания случайного массива байтов, да, самый безопасный способ:
НО ваши потоки могут блокироваться, если на машине недостаточно случайности, в зависимости от вашей ОС. Следующее решение не заблокирует:
Это связано с тем, что в первом примере используется
/dev/random
и будет блокироваться, ожидая большей случайности (сгенерированной мышью / клавиатурой и другими источниками). Во втором примере используется/dev/urandom
не блокирующий.источник