Я хочу зашифровать (RSA) символ до целого числа, используя его значение ASCII. Например. 'a' зашифровано как 48.
Для шифрования: c=pow(m,e)%n
, где c - зашифрованный текст, m - простой текст, а (e, n) - открытый ключ.
Если pow (m, e) большое, скажем 67 ^ 7, оно не поместится в int или long. Но если я использую double, я не могу использовать его с оператором модуля%. Итак, я написал эту функцию для шифрования с помощью цикла for:
int encrypt(int m, int e, int n)
{
int res=m, i;
for(i=0; i<e-1;i++)
res=(res*res)%n;
return res;
}
Это сработало для 67 ^ 7mod11, что составляет 67, но потом я узнал, что это не совсем правильно. Где я ошибся?
e-1
квадрат, поэтому вычисляетеm^(2^(e-1))
по модулюn
. Вам понадобитсяres = (res*m)%n;
для простого возведения в степень с помощью алгоритма повторного умножения. - person Daniel Fischer   schedule 22.08.2013