2011-04-15 14 views

Respuesta

15

Si ya está usando Apache Commons Lang, el RandomUtils hace de esta una sola línea:

byte[] randomBytes = RandomUtils.nextBytes(20); 
+6

Después de hacer algunas excavaciones, RandomUtils usa Math.random() bajo el capó, no SecureRandom. Solo quería hacer esto explícito. – Evo510

1

Crear una objeto aleatoria con una semilla y obtener 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]); 
6

Java 7 introducido ThreadLocalRandom que es aislado en el hilo actual.

Esta es otra interpretación de maerics's solution.

final byte[] bytes = new byte[20]; 
ThreadLocalRandom.current().nextBytes(bytes); 
+1

Tal vez algunos paréntesis demasiados después de la palabra 'ThreadLocalRandom'? Mejor: 'ThreadLocalRandom.current(). NextBytes (bytes);' –

14

Si quieres un generador de números aleatorios criptográficamente fuerte (también de subprocesos) sin necesidad de utilizar una tercera parte de la API, puede utilizar SecureRandom.

Java 6 & 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); 
-1

quería ver cómo todo el mundo se siente acerca de esto. Lo estoy usando para encriptar paquetes io a través de 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]); 
+0

Más complicado es rara vez mejor. – zaph

+0

@zaph * sarcasmo *? – TheRealChx101

+0

No, no sarcasmo, simplemente tome los bytes necesarios de 'SecureRandom', vea https://stackoverflow.com/a/34912596/451475. – zaph

Cuestiones relacionadas