Primero factorizas
n y obtienes
p = 173 y
q = 409.
Calculas
d, tal que
d * e (mod phi(n)) = 1. Recuerda que
phi(n) = (p - 1) * (q - 1). Para calcular
d hice este código en C:
#define E 19
#define PHI_N 70176 //(p - 1) * (q - 1)
#include <stdio.h>
int main()
{
int i;
for(i = 0; i < 70757; i++)
{
if(((i
* E
) % PHI_N
) == 1) printf("d = %d\n", i
); }
return 0;
}
Una vez tenemos
d = 7387, desciframos cada letra. Si llamamos
c a la letra a descifrar y
m la letra original,
m = (c ^ d) (mod n). Así ya tendrás el mensaje descifrado en números:
{19, 20, 1, 20, 5, 13, 1, 14, 21, 9, 5, 14, 5, 20, 5, 7, 22, 19, 16, 17, 1, 19, 1, 17, 19, 9, 13, 16, 20, 20, 22, 6, 9, 3, 9, 3, 9, 5, 14, 21, 5, 13, 5, 14, 21, 5, 20, 7, 19, 1, 14, 4, 5, 20}
Así tan sólo te queda sustituirlo por las letras, que no tiene mucho misterio xDD. Hice este programa para que me lo hiciera solo si no te apetece hacerlo a mano:
#include <stdio.h>
int main()
{
int i;
char abc[] = " ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
int cifrado[] = {19, 20, 1, 20, 5, 13, 1, 14, 21, 9, 5, 14, 5, 20, 5, 7, 22, 19, 16, 17, 1, 19, 1, 17, 19, 9, 13, 16, 20, 20, 22, 6, 9, 3, 9, 3, 9, 5, 14, 21, 5, 13, 5, 14, 21, 5, 20, 7, 19, 1, 14, 4, 5, 20};
for(i
= 0; i
< 54; i
++) printf("%c", abc
[cifrado
[i
]]); return 0;
}
Para hacer el paso de descifrar tendrás problemas con elevar a
d según qué métode utilices. La calculadora de Windows sorprendentemente parece que lo realiza bien, yo utilizo un sistema de cadenas para estas cuentas tan bestias.
Un saludo de ghastlyX