Algoritmo de descifrado RSA
Criptosistema de clave pública RSA:
1 Genera aleatoriamente un par de claves: genera aleatoriamente dos números primos grandes :p. , q Calcular n=p×q
2 Generar aleatoriamente la clave de cifrado e: Elija una e aleatoria para que Gcd (e, (p-1)*(q-1)) = 1 Para elegir a. e aleatorio, haga que e y (p-1)*(q-1) sean números primos. Por lo general, e también se elige como número primo.
Esto genera un par de claves públicas (n, e)
3. Calcula la clave de descifrado d: Calcula un número d tal que e*d mod (p-1) * (q-1) = 1, donde n y d también son números primos.
De esta forma se obtiene un par de claves privadas (n,d)
El remitente envía un número M a la persona que posee la clave privada (n,d) p>
El remitente envía el texto cifrado C=M^e mod n
El receptor descifra M=C^d mod n
Por supuesto, calcular el módulo exponencial requiere un algoritmo especial; de lo contrario, la computadora no podrá No se puede hacer esto: El algoritmo es el siguiente:
#include lt;iostreamgt;
#include lt;cmathgt; p>
usando el espacio de nombres std;
int exp_mod(int a, int n, int z)
{
int exp = 1; p>
int x = a z;
mientras (ngt; 0)
{
if(n2==1)
exp = (exp * x) z;
p>x = (x * x) z
n = n/2;
return exp;
}
int principal()
{
int a, n, z ;
coutlt; lt; "Ingrese la base: ";
cingt;gt;a;
coutlt;lt; ";
cingt;gt;n;
cout lt; lt; "Por favor, introduzca el módulo:";
cingt; gt; z; p>
int resultado = exp_mod(a, n, z) ;
cout lt;lt; "Resultado:"lt;lt;resultlt;lt;lt;endl;
coutlt;lt; "Resultado del algoritmo general"lt;lt;long (pow(a, n))z lt; /*double pow(int
x, int y) Buscar la potencia y de x*/
devuelve 0;
}
Este es el código fuente de C para calcular A^B mod C.
Espero que te sea de ayuda. Si escribes bien, ¡no olvides sumar puntos!