¿Cómo puedo crear una matriz de 20 bytes aleatorios en Java?
130
Prueba el Random.nextBytes
método:
byte[] b = new byte[20];
new Random().nextBytes(b);
Si desea un generador de números aleatorios criptográficamente fuerte (también seguro para subprocesos) sin usar una API de terceros, puede usarlo SecureRandom
.
Java 6 y 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Java 8 (aún más seguro):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
Si ya está usando Apache Commons Lang, RandomUtils
esto lo convierte en una línea:
byte[] randomBytes = RandomUtils.nextBytes(20);
Java 7 introdujo ThreadLocalRandom que está aislado del hilo actual .
Esta es otra versión de la solución de Maerics .
fuente
ThreadLocalRandom
? Mejor:ThreadLocalRandom.current().nextBytes(bytes);
Cree un objeto aleatorio con una semilla y obtenga la matriz al azar haciendo:
fuente
Para aquellos que desean una forma más segura de crear una matriz de bytes aleatoria, sí, la forma más segura es:
PERO sus hilos podrían bloquearse si no hay suficiente aleatoriedad disponible en la máquina, dependiendo de su sistema operativo. La siguiente solución no bloqueará:
Esto se debe a que el primer ejemplo usa
/dev/random
y bloqueará mientras espera más aleatoriedad (generado por un mouse / teclado y otras fuentes). El segundo ejemplo utiliza/dev/urandom
que no bloqueará.fuente