2012-02-23 8 views
1

pls次のコードをチェックしてください..私はpとqを実装しようとしているRSAアルゴリズムを17と11と宣言しています...プログラムはセグメンテーションフォールトをそれはこのエラーを与えている理由の入力にプレーンテキスト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;   
}   
+0

「ワンセグ障害は、」あなたは、あなたが所有していないメモリにアクセスしていることを意味します。デバッガでプログラムを実行して、問題の原因となっている行を見つけてそこから実行する必要があります。 –

+0

コンストラクタ内のcin >> Mが問題を引き起こすことを発見しました。Mは何らかの値として宣言されましたが、同じseg-faultエラーです。私は自分が所有していないメモリにアクセスしています。 –

答えて

1

ありませんので、何らかのポインタ処理が行われているように見える場合は、スタックオーバーフローの可能性があります。私はあなたのgcd関数が再帰的に実装されていることに気づき、等しいパラメータ(a == b)で呼び出されると再帰を中止しません。おそらく、if(a<b)という行はif(a>=b)になるはずですか?

編集:いずれかの権利いないようです...あなたは、全体として、そのメソッドをチェックすることをお勧めします:)

関連する問題