Як я можу створити масив з 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, яка є виділеною до поточного потоку .
Це чергове видання рішення маерики .
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
який не буде блокувати.