⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsa加密解密算法.cpp

📁 RSA加密算法,简单实现RSA加密算法
💻 CPP
字号:
  //rsa算法的加密程序
  //学号:2004182534
  //姓名:唐淑娟

  #include   <iostream.h>   
  #include   <conio.h>   
  #include   <math.h>   
  #include   <stdlib.h>   
  #include   <string.h>   
    
  int   Transform(int   m,int   k,int   n); //转换程序  
  int   IsRelativelyPrime(int   a,int   b); //判相关素数
  int   IsPrime(int   a);//判素数   
    
  void   main()   
  {   
  int   X,Y,e,d,n,En,p,q;   
    
  cout<<"\t    *****RSA 加密、解密码的简单实现*****\n\n";   
  cout<<"请输入一个较大的素数   p:   ";   
  cin>>p;   
  while(!IsPrime(p))   
  {   
  cout<<"Error!   p  应该是一个素数:   ";   
  cin>>p;   
  }   
    
  cout<<"请输入另一个素数(该素数应该与P相差较大)   q:   ";   
  cin>>q;   
  while(!IsPrime(q))   
  {   
  cout<<"Error!   q   应该是一个素数:   ";   
  cin>>q;   
  }   
    
  cout<<"\n计算得p与q的乘积 n 和 根据欧几里德算法计算解密码密钥  ф(n):"<<endl;   
  n=p*q;   
  En=(p-1)*(q-1);   
  cout<<"n   =   "<<n<<"   和   "<<"ф(n)   =   "<<En<<endl;   
    
  cout<<endl<<"请输入加密密钥   e:   ";   
  cin>>e;   
  while   (!IsRelativelyPrime(e,En))   
  {   
  cout<<"e   应该是一个与 n相关的素数   :   ";   
  cin>>e;   
  }   
  cout<<"解密密钥  d"<<endl;   
  d=1;   
  while   (((e*d)%En)!=1)   d++;   
  cout<<   "d   =   "   <<   d   <<   endl;   
    
  cout<<endl<<"请输入明文   X:"<<endl;   
  cin>>X;   
  while   (X>=n||X<=0)   
  {   
  cout<<   "\aX  应该是0到n之间  "<<n<<"   :   ";   
  cin>>X;   
  }   
    
  
  Y=Transform(X,e,n);   
  cout<<"加密得到的密文:   Y   =   "<<Y<<endl;   
    
  cout<<"解密得到的明文:  "<<endl;   
  X=Transform(Y,d,n);   
  cout<<"X   =   "<<X<<endl;   
  cout<<"\n按任意键盘退出该系统,ByBy......"<<endl;   
  getch();   
  }   
    
  int   Transform(int   m,int   k,int   n)   
  {   
  long   int   r=1;   
  char   bk[16];   
  itoa(k,bk,2);   
    
  for   (unsigned   int   i=0;i<strlen(bk);i++)   
  {   
  r=(r*r)%n;   
  if   (bk[i]   ==   '1')   
  {   
                          r=(r*m)%n;   
  }   
  }   
  return   r;   
  }   
    
  int   IsRelativelyPrime(int   a,int   b)   
  {   
  for(int   i=2;i<=sqrt(a<b?a:b);i++)   
  if   ((a%i   ==   0)&&(b%i==0))   
  return   0;   
  return   1;   
  }   
    
  int   IsPrime(int   a)   
  {   
  for(int   i=2;i<=sqrt(a);i++)   
  if(a%i==0)   return   0;   
  return   1;   
  } 
  //注释:该系统只是对RSA算法的一个简单的实现,并不是一个完善的加密系统,只是实现了该算法的
  //思想而已,还有很多不完善的地方,(比如:对明文的加密也只是对数字的加密,没有考虑数字也字
  //母的转换等实际的情况,请老师谅解!).

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -