пожалуйста, проверьте следующий код ... свой алгоритм RSA, который я пытаюсь реализовать, используя p и q, объявленные как 17 и 11 ... программа выдает ошибку сегментации (сбрасывается ядро) как ошибку после запроса ввода пользователем простой текст М ... что это значит и почему он дает эту ошибку ?? ... любая помощь будет оценена ..:)
#include<iostream>
#include<math.h>
using namespace std;
class RSA
{
public:
long M,phi,d,e,n,c;
int p,q;
RSA();
void calculate();
long relprime();
long gcd(long,long);
void encrypt();
void decrypt();
};
RSA::RSA()
{
cout<<"enter the plain text M";
cin>>M;
p=17;
q=11;
}
void RSA::calculate()
{
n=p*q;
phi=(q-1)*(p-1);
e=(long)relprime();
cout<<e;
d=0;
while(d==0)
{
for(int k=1;;k++)
{
if((phi*k+1)%e==0)
d=(phi*k+1)/e;
}
}
cout<<d;
}
long RSA::relprime()
{
for(int i=2;i<phi;i++)
{
if(gcd(i,phi)==1)
return (long)i;
}
}
long RSA::gcd(long a,long b)
{
if(a<b)
{
if(a%b==0)
return a;
else gcd(b-a,a);
}
else gcd(b,a);
}
void RSA::encrypt()
{
c=(long)pow(M,e);
c=c%n;
cout<<"encrypted c="<<c;
}
void RSA::decrypt()
{
M=(long)pow(c,d);
M=M%n;
cout<<"plain text="<<M;
}
int main()
{
RSA r;
r.calculate();
r.encrypt();
r.decrypt();
return 0;
}