Red de conocimiento informático - Problemas con los teléfonos móviles - Algoritmo de descifrado RSA

Algoritmo de descifrado RSA

Acabo de terminar de revisar el conocimiento del algoritmo sobre RSA, déjame decirte:

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)

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;

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;

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!