¿Cómo puedo crear una matriz de 20 bytes aleatorios en Java?
¿Cómo puedo crear una matriz de 20 bytes aleatorios en Java?
Respuestas:
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 .
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? Mejor:ThreadLocalRandom.current().nextBytes(bytes);
Cree un objeto aleatorio con una semilla y obtenga la matriz al azar haciendo:
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]);
Para aquellos que desean una forma más segura de crear una matriz de bytes aleatoria, sí, la forma más segura es:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
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á:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
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á.