Come posso creare un array di 20 byte casuali in Java?
Come posso creare un array di 20 byte casuali in Java?
Risposte:
Prova il Random.nextBytes
metodo:
byte[] b = new byte[20];
new Random().nextBytes(b);
Se desideri un generatore di numeri casuali crittograficamente potente (anche thread-safe) senza utilizzare un'API di terze parti, puoi utilizzare SecureRandom
.
Java 6 e 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Java 8 (ancora più sicuro):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
Se stai già utilizzando Apache Commons Lang, questo lo RandomUtils
rende un one-liner:
byte[] randomBytes = RandomUtils.nextBytes(20);
Java 7 ha introdotto ThreadLocalRandom che è isolato dal thread corrente .
Questa è un'altra interpretazione della soluzione maerica .
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? Meglio:ThreadLocalRandom.current().nextBytes(bytes);
Crea un oggetto casuale con un seme e ottieni l'array casuale facendo:
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]);
Per coloro che desiderano un modo più sicuro per creare un array di byte casuali, sì, il modo più sicuro è:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
MA i tuoi thread potrebbero bloccarsi se non c'è abbastanza casualità disponibile sulla macchina, a seconda del tuo sistema operativo. La seguente soluzione non bloccherà:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Questo perché il primo esempio usa /dev/random
e bloccherà in attesa di maggiore casualità (generata da un mouse / tastiera e altre fonti). Il secondo esempio usa /dev/urandom
che non si bloccherà.