2015-09-28 2 views
-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.

Есть ли у меня ошибка в моем коде?

ответ

3

Проблема здесь, скорее всего, заключается в том, что оператор ^ не является показателем, это побитовое исключение или. 2 XOR 7, действительно, 5.

Возможно, вы захотите std::pow.

+0

Также обратите внимание, что существуют способы более эффективных алгоритмов для вычисления модульных выражений (особенно, когда вы выходите за пределы того, что могут делать «обычные» целые числа, как обычно с RSA). –

Смежные вопросы