Расшифровка RSA дает неверный результат - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь реализовать шифрование 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;
}

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете использовать следующий код для вычисления модуля (O(n) сложность)

//Compute a^b mod n
int powermod(int a, int b, int n) {
    int result = 1;
    for (int i=1;i<=b;++i) {
       result *= (a%n);
       result %= n;
    }
    return result%n;
}

Вы можете изменить быструю мощность аналогичным образом, чтобы вычислить мод экспоненты. Используется следующая формула

a^b mod n = (a mod n)^b mod n
...