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; }
相关文章推荐
- ListView 搭配 CheckBox 全选超过一屏幕数据后出错
- 网络通信 --> 同步、异步、阻塞与非阻塞介绍
- Android Studio多渠道打包
- java泛型(一)、泛型的基本介绍和使用
- uml的关联关系中聚合与组合的区别
- 不规则图形 尖角转圆角
- 安卓 天气预报
- 非常好用的万能BaseAdapter
- 2.替换空格
- JavaScript 对象(1)
- linux常用命令
- mac thinkphp3.2 nginx配置rewrite pathinfo
- 多线程断点续传及下载
- Android学习-进阶之路
- #define和typedef在定义指针类型上的优劣
- 华为p7怎么打开usb调试模式
- LEIJP开船(线段树)
- HDU 5665
- 图片轮播(jquery方式)
- Android Studio 升级之更新包升级版本