1
請檢查以下代碼..我試圖用p和q聲明爲17和11的RSA算法...程序給出了段錯誤(核心轉儲)爲將提示用戶輸入明文M,後錯誤......這是什麼意思,爲什麼它給這個錯誤?? ...任何幫助,將不勝感激.. :)我的RSA算法程序中的分段錯誤
#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;
}
「賽格故障」是指您要訪問的是你沒有自己的記憶。您應該在調試器中運行您的程序以查找哪條線路導致問題,然後從那裏開始。 – 2012-02-23 13:40:04
發現cin >> M在構造函數中導致問題......所以聲明M爲某個值,但仍然是相同的seg-fault錯誤..我不認爲我正在訪問任何我不擁有的內存.. – 2012-02-23 13:55:52