c++版RSA加密体制

  • Y6_542245
    了解作者
  • 905.9KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-28 06:41
    上传日期
c++编写的完整的RSA加密算法
c++版RSA密码体制.rar
  • RSA密码体制
  • Debug
  • 模平方算法.pdb
    497KB
  • 主程序.ilk
    261.1KB
  • vc60.pdb
    60KB
  • 模平方算法.obj
    6.3KB
  • 素数.obj
    5.8KB
  • 主程序.pdb
    513KB
  • 求逆元.pdb
    497KB
  • 主程序.obj
    16.7KB
  • vc60.idb
    49KB
  • RSA密码体制.pdb
    473KB
  • 模平方算法.pch
    238.5KB
  • 主程序.opt
    42.5KB
  • 主程序.exe
    212.1KB
  • 求逆元.obj
    7.6KB
  • RSA密码体制.ilk
    223.1KB
  • 模平方算法.ilk
    241.7KB
  • 模平方算法.opt
    42.5KB
  • 求逆元.ilk
    249.5KB
  • RSA密码体制.pch
    234.6KB
  • 求逆元.exe
    208.1KB
  • RSA密码体制.exe
    200.1KB
  • 主程序.pch
    248.6KB
  • 求逆元.pch
    238.5KB
  • 模平方算法.exe
    208.1KB
  • RSA密码体制.opt
    42.5KB
  • LFSR.obj
    12.7KB
  • 求逆元.dsw
    520B
  • 素数.cpp
    380B
  • 主程序.cpp
    3.3KB
  • 主程序.dsp
    3.3KB
  • 主程序.suo
    6.5KB
  • 模平方算法.dsw
    528B
  • 模平方算法.plg
    766B
  • 求逆元.plg
    746B
  • RSA密码体制.dsw
    530B
  • 主程序.plg
    746B
  • 主程序.opt
    47.5KB
  • 主程序.dsw
    520B
  • 模平方算法.opt
    47.5KB
  • 模平方算法.cpp
    517B
  • 求逆元.cpp
    695B
  • 模平方算法.dsp
    3.4KB
  • 主程序.sln
    339B
  • 主程序.ncb
    41KB
  • 求逆元.dsp
    3.3KB
  • 求逆元.ncb
    33KB
  • RSA密码体制.opt
    47.5KB
  • RSA密码体制.dsp
    4.2KB
  • 求逆元.opt
    47.5KB
  • RSA密码体制.plg
    1.3KB
  • 模平方算法.ncb
    33KB
  • RSA密码体制.ncb
    41KB
内容介绍
#include<iostream.h> #include<stdio.h> #define max 100 //素数判别 void panbiesushu(int &n) { int a[max]; int temp1,temp2,a1,b,y,d; bool x=false; while(!x) { cin>>n; temp2=n-1,temp1=1,d=1,b=-1; cout<<"请输入一个较小的检测数(保证每次输入的检测数不同):"<<endl; cin>>a1; while(temp1!=0) { b++; temp1=temp2/2; a[b]=temp2%2; temp2=temp2/2; } for(int i=b;i>=0;i--) { y=d;d=(d*d)%n; if((d==1)&&(y!=1)&&(y!=(n-1))) { x=false; cout<<"输入的大整数不是素数!请重新输入:"<<endl; goto end; } if(a[i]==1) d=(d*a1)%n; } if(d!=1) { x=false; cout<<"输入的大整数不是素数!请重新输入:"<<endl; } if(d==1) { x=true; cout<<"输入的大整数是素数!"<<endl; } end:; } } //随机数(公钥e) void creat_e(int &f,int &e) { int x,y,r; cout<<"请输入数e保证其与n的殴拉函数互素!"<<endl; while(1) { cin>>e; y=e;x=f; while(y!=1) { r=x%y;x=y;y=r; if(y==1) { cout<<"输入的数与n的殴拉函数互素!"<<endl; goto end1; } if(y==0) {goto end2;} } end1:break; end2:; cout<<"输入的数不满足互素的要求,请重新输入:"<<endl; } } //求逆元算法 int creatniyuan(int &n,int &e) { int x1,x2,x3,y1,y2,y3,t1,t2,t3,temp; x1=1;x2=0;x3=n;y1=0;y2=1;y3=e; while(1) { if(y3==1) {return y2;break;} temp=x3/y3; t1=x1-temp*y1; t2=x2-temp*y2; t3=x3-temp*y3; x1=y1; x2=y2; x3=y3; y1=t1; y2=t2; y3=t3; } } //模平方重复法 int mopingfang(int b,int n,int m) { int n1[max],x=-1,temp=1; int a=1; while(temp!=0) { x++; n1[x]=n%2; temp=n/2; n=temp; } for(int i=0;i<=x-1;i++) { if(n1[i]==1) { a=(a*b)%m; b=(b*b)%m; } else if(n1[i]==0) { a=a%m; b=(b*b)%m; } } return (a*b)%m; } void Encrypt(char *&inchar,char *&outchar,int *&temptemp,int &charnum,int n,int d,int e,int choice) { int temp; if(choice==0) { for(int i=0;i<charnum;i++) { temp=(int)inchar[i]; temptemp[i]=mopingfang(temp,e,n); outchar[i]=(char)(temptemp[i]%256); } } if(choice==1) { for(int j=0;j<charnum;j++) { temp=mopingfang(temptemp[j],d,n); outchar[j]=(char)(temp%256); } } } void main() { int p,q,e,f,d,temp;char *inchar=new char[max];char *outchar=new char[max]; char *out_inchar=new char[max];int *temptemp=new int[max]; cout<<"******************** RSA密码体制********************"<<endl; cout<<"请输入一个的大整数p(以保证其为素数):"<<endl; panbiesushu(p); cout<<"则p="<<p<<endl; cout<<"请输入一个的大整数q(以保证其为素数):"<<endl; panbiesushu(q); cout<<"则q="<<q<<endl; f=(p-1)*(q-1); creat_e(f,e); cout<<"则e="<<e<<endl; d=creatniyuan(f,e); cout<<"经计算e的逆元d="<<d<<endl; cout<<"则公钥为("<<p*q<<","<<e<<")"<<endl; cout<<"则私钥为("<<p*q<<","<<d<<")"<<endl; cout<<"请输入明文并以回车表示结束"<<endl; for(temp=0;(inchar[temp]=getchar())!='\n';temp++); cout<<"明文加密后的密文为:"<<endl; Encrypt(inchar,outchar,temptemp,temp,p*q,d,e,0); for(int k=0;k<temp;k++) cout<<outchar[k]; cout<<endl; cout<<"密文解密后的明文为:"<<endl; Encrypt(inchar,out_inchar,temptemp,temp,p*q,d,e,1); for(int m=0;m<temp;m++) cout<<out_inchar[m]; cout<<endl; }
评论
    相关推荐
    • sift 算法 C++
      经典的sift算法,可以用于特征提取和配准,小伙伴们加油!!!
    • DES算法C++实现
      DES算法C++实现 DES算法C++实现 DES算法C++实现 DES算法C++实现
    • DES算法C++实现
      DES算法C++实现DES算法C++实现DES算法C++实现DES算法C++实现
    • kruscal算法C++
      kruscal算法,编译环境C++,送给算法小白~
    • DES算法C++实现
      Des算法C++实现,可用网上的算法工具验证,工程中包含测试窗体,MyDes为Des的实现,TestForm是测试类
    • AES算法C++实现
      AES算法C++实现AES算法C++实现AES算法C++实现AES算法C++实现
    • EM算法C++实现
      EM算法C++实现 EM算法C++实现 EM算法C++实现 EM算法C++实现 EM算法C++实现 EM算法C++实现 EM算法C++实现 EM算法C++实现
    • floyd算法c++
      floyd算法C++代码,可解决最小路径问题
    • CMAES算法C++
      CMA-ES算法C++包,里面有简单的使用说明注释,以及一个简单的函数拟合举例
    • 汉诺塔算法 C++
      汉诺塔算法 C++ 有截图 结果如下: 请输入盘子数:4 各步骤如下: A-->B A-->C B-->C A-->B C-->A C-->B A-->B A-->C B-->C B-->A C-->A B-->C A-->B A-->C B-->C 总步骤数为:15 Press any key to continue