Автор: Sofya_111 (12.10.2011 в 21:13)
Здравствуйте!
Очень прошу помощи в реализации алгоритма шифрования.
Собственно алгоритм:
1. Выбрать простые числа p и q
2. Вычислить n = p * q
3. Вычислить f = (p - 1) * (q - 1)
4. Выбрать число e взаимно простое с f
5. Выбрать число d так, чтобы e * d = 1 (mod f)
#include <iostream>
#include <cmath>
using namespace std;
const int p = 3557;
const int q = 2579;
int main()
{
long n = p * q;
long f = ( q - 1 ) * ( p - 1 );
long e = 3;
long d = ( 1 + 2 * f ) / e;
long m = 11;
long a = fmod( pow( m, e ), n );
long b = fmod( pow( a, d ), n );
cout << "Source text: " << m << "; ciphertext: " << a << "; unciphertext: " << b;
char ch;
cin >> ch;
return 0;
} |
Шифрование: a = m^e(mod n)
Дешифровка: b = a^d (mod n)
Проблема в том, что текст шифрует правильно, а дешифрует не правильно. Помогите, плиз!!!!