Я пытаюсь реализовать шифрование RSA, и всякий раз, когда реализуется часть дешифрования, я получаю неправильный ответ.
Все до тех пор, пока шифрование не даст мне правильные значения: n равно 187, phi равно 160, e равно 3, закрытый ключ d равно 107 и текст шифра c равен 183. После этого я вычисляю c ^ Сначала d (что дает мне -9223372036854775808), затем выполните mod (n) для этого результата, чтобы получить -162 (предполагаемое дешифрование).
Я предполагаю, что ошибка в части c ^ d, но я не могу понять, что происходит не так. Любая помощь будет оценена.
int main()
{
long p = 11;
long q = 17;
long n = p * q;
double phi = (p-1) * (q-1);
int e = 3;
while(e < phi) {
if(GCD(e, phi) == 1) break; //GCD is a function that returns the GCD
else e++;
}
int k = 2;
// private key computation
double d = (1+(k*phi))/e;
double msg = 72;
long c = pow(msg, e);
// c mod(n)
c %= n;
long decr = pow(c, d);
decr %= n;
return 0;
}