您的位置:首页 > 其它

RSA加密和解密实现

2016-04-26 20:40 357 查看
根据RSA一堆原理,写了个实现的代码,亲测可用,哈哈记录一下

#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
int exgcd(int a,int b,int & x,int & y){
if(b == 0){
x = 1;
y = 0;
return a;
}
int r = exgcd(b, a%b, x, y);
int t = y;
y = x - (a/b)*y;
x = t;
return r;
}
//快速幂
int PowerMod(int a, int b, int c)
{
int ans = 1;
a = a % c;
while(b>0) {
if(b % 2 == 1)
ans = (ans * a) % c;
b = b/2;
a = (a * a) % c;
}
return ans;
}

long SKG(long p,long q,long e,long M)
{
long N=p*q;
long fN=(p-1)*(q-1);
long C=1;
C=PowerMod(M,e,N);
return C;
}

long SKG_1(long p,long q,long e,long C)
{
long N=p*q;
long fN=(p-1)*(q-1);
long M=1;
int x,y;
long d;
exgcd(e,fN,x,y);
d=x%fN;
M=PowerMod(C,d,N);
return M;
}

int main()
{
long p,q,e,d,M,C;
char i;
printf("请选择加密或解密:加密请选择1,解密请选择2\n");
i=getchar();
if(i=='1')
{
printf("请依次输入p,q,e,M\n");
scanf("%d%d%d%d",&p,&q,&e,&M);
printf("%d\n",SKG(p,q,e,M));
}

if(i=='2')
{
printf("请依次输入p,q,e,C\n");
scanf("%d%d%d%d",&p,&q,&e,&C);
printf("%\d\n",SKG_1(p,q,e,C));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: