rsa加密算法

来源:互联网 发布:淘宝女店主猝死艾珺 编辑:程序博客网 时间:2024/06/02 11:32

#include<iostream.h>
#include<math.h>


int  rsa(int p,int q,int e)  //求解密密钥d的函数(根据Euclid算法)
{
 int g,k,r,n1,n2,t;
    int b1=0,b2=1;

 g=(p-1)*(q-1);
 n1=g;
 n2=e;
   
    while(1)
 {
        k=n1/n2;
        r=n1-k*n2;
  if(r!=0)
  {
           n1=n2;
     n2=r;
     t=b2;
     b2=b1-k*b2;
     b1=t;
  }

  else
  {
   break;
  }

 }

    return g+b2%g;

}


int mi(int x,int r,int n)  //模n的大数幂乘的快速算法
{
 int a,b,c=1;

 a=x;
 b=r;

 while(1)
 {
   
   if(b==0)
   {
  break;
   }

   if(b%2!=0)
     {
              
   b=b-1;
      c=(c*a)%n;

   }
  else
  {
  b=b/2;
  a=(a*a)%n;

  }

 }

 return c;

}
           
void main()
{
  int p,q,e,m;
 
  cout<<"*******************************************************/n/n";
  cout<<"               RSA公钥密码体制                         /n/n";
  cout<<"(1) 选取两个大素数p和q(保密)/n";
  cout<<"(2) 计算n=pq(公开),g=(p-1)*(q-1) (保密)/n";
  cout<<"(3) 随机选取正整数e,1<e<g,满足gcd(e,g)=1,e是公开的加密/n";
  cout<<"密钥./n";
  cout<<"(4) 计算d,满足de≡1(mod g).d是保密的解密密钥/n";
  cout<<"(5) 加密变换: 对明问m∈Z,密文为 c=m^e mod n /n";
  cout<<"(6) 解密变换:对密文c∈Z,明文为 m=c^d mod n /n/n";
  cout<<"*******************************************************/n/n";
  cout<<"请输入大素数p和q(保密)及随机选取的正整数e/n";
  cin>>p>>q>>e;
  cout<<"得到解密密钥为/n";
  cout<<rsa(p,q,e)<<endl;
  cout<<"请输入明文/n";
  cin>>m;
  cout<<"其相应的密文为/n";
  cout<<mi(m,e,p*q)<<endl;
  cout<<"我们用得到的解密密钥"<<rsa(p,q,e)<<"得到其对应的明文为/n";
  cout<<mi(mi(m,e,p*q),rsa(p,q,e),p*q)<<endl;

}
 

原创粉丝点击