RSA加密算法c++实现

RSA加密算法c++实现RSA加密算法c++实现 先码个代码:/*************************************************************************>FileName:RSA.cpp>Author:YB>E-mail:134…

大家好,又见面了,我是你们的朋友全栈君。

RSA加密算法c++实现

先码个代码:

/************************************************************************* > 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; }

 

posted @
2019-03-06 11:40
Y先森0.0 阅读(
) 评论(
)
编辑
收藏
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143698.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • discuz 二次开发[通俗易懂]

    discuz 二次开发[通俗易懂]转载地址:http://www.cnblogs.com/LY-leo/p/5843439.htmldiscuz框架也算是比较流行的社区论坛框架,discuz的基础架构采用世界上最流行的web编程组合PHP +MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。1、安装discuz先下载 discuz的安装包,解压之后有3个文件,如下:

  • 常用的垂直细分引擎工具

    常用的垂直细分引擎工具常用的垂直细分的引擎工具我们需要一些垂直细分的引擎工具,帮我们搞定更精准的信息。本文基于大家日常上网的需要,分类整理了不同检索需求的工具,主要包括:电子书、图片、网盘、音乐、工作机会以及商品价格检索。

  • Spring之ORM

    Spring之ORMSpring之ORM

  • 很全的zencart 模板修改

    很全的zencart 模板修改zencart目录结构及模板修改1、zen-cart模板规则1.1/include/目录底下文件夹存放规则及其作用language常数定义;modules具体页修改这个文件夹底下是放模板的这面是默认模板目录,所有在自定义模板找不到自己所要安装的模板的文件都可以在这里找到1.2文件夹底下文件的规则及其作用板文件夹底下一般有如下的文…

  • NAS与SAN

    NAS与SAN

  • 软件测试缺陷报告内容_软件测试缺陷分析

    软件测试缺陷报告内容_软件测试缺陷分析1软件缺陷缺陷是一种泛称,它可以指功能的错误,也可以指性能低下,易用性差等 并不是所有的测试人员都能提交被开发认可的缺陷,也不是测试人员在任何时候都能提交被开发认可的缺陷2什么是软件缺陷软件未达到产品说明书标准的功能 软件出现了产品说明书指明不会出现的错误 软件功能超出产品说明书指明范围 软件未达到产品说明书虽未指出但应达到的目标 软件测试员认为软件难以理解,不易使用,运行速度缓慢,或者最终用户认为不好3缺陷产生的原因4发现缺陷用户体验不够好 界面上有明显的错误信

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号