首页 / 算法 / RSA加密算法c++实现
RSA加密算法c++实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RSA加密算法c++实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1888字,纯文字阅读大概需要3分钟。
内容图文
![RSA加密算法c++实现](/upload/InfoBanner/zyjiaocheng/839/ef628cbe779d4b519cd5631b7e24c5f3.jpg)
先码个代码:
/************************************************************************* > File Name: RSA.cpp > Author: YB > E-mail: 1348756432@qq.com > Created Time: 2019年03月05日 星期二 ************************************************************************/ #include<bits/stdc++.h> using namespace std; int Euler(int n)//欧拉函数 求1到n中有多少个整数与n互质 { int rs=1; for(int i=2;i*i<=n;i++) { if(n%i==0) { rs*=(i-1); n/=i; while(n%i==0) { rs*=(i-1); n/=i; } } } if(n>1) rs*=(n-1); return rs; } int gcd(int a,int b)//求a,b的最大公约数 { if(b==0) return a; return gcd(b,a%b); } int check(int n)//判断n是不是素数 { if(n==1) return 0; if(n==2) return 1; for(int i=3;i*i<=n;i=i+2) { if(n%i==0) return 0; } return 1; } int gnerating_primes(int n)//产生小于等于n的第一个素数 { if(n%2==0) n--; for(int i=n;i>1;i=i-2) { if(check(i)==1) return i; } return -1;//表示没有小于等于n的素数 } int multiplicative_inverse_element(int a,int r)//求a对于r的乘法逆元 { int rs=1; if(check(r)==1)//r是素数 采用费马小定理 { for(int i=1;i<=r-2;i++) rs*=a,rs%=r; }else //r不是素数,采用欧拉定理的推论 { int k=Euler(r)-1; for(int i=1;i<=k;i++) rs*=a,rs%=r; } return rs; } int get_pk(int w) { int pk=2; for(pk=2;pk<w;pk++) { if(gcd(w,pk)==1) return pk; } return pk; } int square_multiplication(int x,int c,int r)//平方乘算法,x的c次方%r { string str=""; while(c) { str=(char)(c%2+'0')+str; c/=2; } int rs=x; int l=str.length(); for(int i=1;i<l;i++) { if(str[i]=='0') rs=((rs%r)*(rs%r))%r; else rs=(((rs%r)*(rs%r))%r*x)%r; } return rs; } int main() { int p=47; int q=61; int r=p*q;//公开模数 cout<<"r="<<r<<endl; int w=Euler(r);//1到r中与r互质的数的个数 //求得公钥 int pk=get_pk(w); //pk=167; cout<<"公钥(pk,r):("<<pk<<","<<r<<")"<<endl; //求得私钥 int sk=multiplicative_inverse_element(pk,w); cout<<"私钥(sk,r):("<<sk<<","<<r<<")"<<endl; int M=123456789;//明文 int K=3;//K位一组 int temp=1; for(int k=1;k<=K;k++) temp*=10; cout<<"密文:"; for(int i=1;i<=K;i++) { cout<<square_multiplication(M%temp,pk,r)<<" "; M/=temp; } cout<<endl; return 0; }
内容总结
以上是互联网集市为您收集整理的RSA加密算法c++实现全部内容,希望文章能够帮你解决RSA加密算法c++实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。