¿Obtener valores deterministas de SecureRandom?

Para fines de evaluación comparativa, me gustaría que un SecureRandom produzca resultados deterministas. ¿Es esto posible mediante el uso de una semilla (o tal vez la especificación de un algoritmo)?

import java.security.SecureRandom;
class TestSecureRandom {
    public static void main(String [] args) {
        SecureRandom rnd = new SecureRandom();
        rnd.setSeed(1);
        System.out.println(rnd.nextInt());
    }
}

Para mí, el programa anterior produce diferentes valores a pesar de que se especifica la semilla.

Respuesta 1

Probablemente, la forma más sencilla de hacerlo es hacer que la mayor parte de su código solo dependa Random, con una instancia que se inyecta (por ejemplo, pasándola a un constructor). De esa manera, para fines de prueba, puede pasar de forma simple Randomcon una semilla fija, pero para ejecuciones reales donde se requiere seguridad, puede pasar una instancia deSecureRandom .

Respuesta: 2

Para anular la semilla predeterminada, pase el nombre del algoritmo PRNG como este

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
class TestSecureRandom {
    public static void main(String [] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
        SecureRandom rnd = SecureRandom.getInstance("SHA1PRNG");
        rnd.setSeed("foo".getBytes("us-ascii"));
        System.out.println(rnd.nextInt());
        System.out.println(rnd.nextInt());
    }
}

Ouput

-207444710
-1693504542
Respuesta: 3

Estoy usando NetBeans 6.8, Tomcat 6 y Maven 2.2 y quiero ver los cambios en mi código inmediatamente en el navegador (que muestra http: // localhost: 8080) después de guardar el archivo. El tomcat-maven-plugin tiene el ...

Esto es un seguimiento de mi última pregunta: el lienzo se dibuja demasiado lento. Ahora que puedo dibujar imágenes más rápidamente, el problema que enfrento es que la carga real de las imágenes lleva mucho tiempo ...

Quiero filtrar una JTable exactamente por una cadena. Mi filtro es así: Pattern.quote (textfield.getText ()); Pero, cuando filtro en "G", obtengo también todas las líneas de la JTable con la entrada "KG". Yo solo ...

Estoy tratando de implementar la unión cruzada usando hadoop en java. Ambos lados de la unión son lo suficientemente grandes como para que no pueda guardar ninguno de ellos en la memoria. He intentado varias cosas y aunque me doy cuenta de que PIG / ...