Как создать массив из 20 случайных байтов?

Как создать массив из 20 случайных байтов в Java?

Ответ 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]);