-1
вхожу значения, p=3
, q=11
, e=7
и m=2
в следующем коде:C++ Формула Проблема
#include <cstdlib>
#include <iostream>
using namespace std;
class Calculate{
int q, p, n, d, e, c, zeta , m, encryption;
public:
Calculate(){
cout << "Enter P" << endl;
cin >> p;
cout << "Enter Q" << endl;
cin >> q;
cout << "Enter E" << endl;
cin >> e;
cout << "Enter M" << endl;
cin >> m;
assign();
}
void test(){
while (e >= zeta || e <=1){
cout << "Enter a correct value for E" << endl;
cin >> e;
}
encrypt();
};
void assign(){
n = p*q;
zeta = (p-1)*(q-1);
for (int j = 2; j < n; j++){
if ((j*e) % zeta == 1){
d = j;
j = n;
}
}
test();
};
void encrypt(){
cout << m << endl;
cout << e << endl;
cout << n << endl;
encryption = (m^e) % n;
cout << "The encryption Is: " << encryption << endl;
};
};
//------------------------------------------
int main(int argc, char *argv[]){
Calculate calc;
system("PAUSE");
return EXIT_SUCCESS;
}
По какой-то причине encryption
всегда равна 5
, что не имеет никакого смысла для меня, так как 2^7 % 33 == 29
.
Есть ли у меня ошибка в моем коде?
Также обратите внимание, что существуют способы более эффективных алгоритмов для вычисления модульных выражений (особенно, когда вы выходите за пределы того, что могут делать «обычные» целые числа, как обычно с RSA). –