Diferencia entre BigInteger.probablePrime () y otros algoritmos de primalidad en java

Estoy implementando un progtwig de cifrado RSA utilizando Java. En este momento estoy usando BigInteger.probablePrime(1024, rnd) para obtener números primos. Aquí rnd es un número aleatorio generado por Random rnd = new Random() . Necesito probar varias velocidades de cifrado.

Mis preguntas son:

  1. ¿Qué algoritmo utiliza BigInteger.probablePrime(1024, rnd) ?

  2. ¿Cuál es la diferencia entre el algoritmo anterior y otros algoritmos: como Rabin-Miller, Fermats, Lucas-Lehmer?

Gracias.

Los probables métodos principales de BigInteger utilizan los algoritmos de Miller-Rabin y Lucas-Lehmer para probar la primalidad.

Ver el método interno BigInteger.primeToCertainty .

El código fuente de Java está disponible para su descarga, por lo que puede verlo usted mismo. Aquí está el código para BigInteger.probablePrime(int, Random) :

 public static BigInteger probablePrime(int bitLength, Random rnd) { if (bitLength < 2) throw new ArithmeticException("bitLength < 2"); // The cutoff of 95 was chosen empirically for best performance return (bitLength < SMALL_PRIME_THRESHOLD ? smallPrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd) : largePrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd)); } 

Las pruebas reales están contenidas en los smallPrime() y largePrime() , que siguen directamente en el código fuente.