RSA加/解密算法--miracl大数库实现
来源:互联网 发布:换手率软件怎么样 编辑:程序博客网 时间:2024/04/30 06:57
可能看到我有三篇<<RSA加/解密算法>>可能很奇怪,其实是有不少人向我要RSA加密解的代码,如果每次都给他们一样的,可能会被老师发觉,所以我就写了不同的语言实现,一来可以加强自己适应不同语言编程的能力,另一方面,则给他们“鱼”。当然如果他们问我“渔”,我也肯定会耐心地一行一行代码解释的,但大多情况都是取"鱼“的。
上代码:
#include "big.h"#include <iostream>#include <cstdlib>using namespace std;Miracl precision(10000,2);int main(){ int bits; Big n,e,d; cout<<"请输入公钥大数的位数:"; cin>>bits; int half = bits/2; Big p,q,fn,tmp; tmp = rand(half,2); p = nextprime(tmp); tmp = rand(half,2); q = nextprime(tmp); n = p*q; fn = (p-1)*(q-1); do{ e = rand(16,2); e = nextprime(e); if(gcd(e,fn)==1) break; }while(true); d = inverse(e,fn); cout<<"公钥:("<<e<<", "<<n<<")"<<endl; cout<<"私钥:("<<d<<", "<<n<<")"<<endl; cout<<"请输入加密数据:"; cin>>tmp; tmp = pow(tmp,e,n); cout<<"加密结果:"<<tmp<<endl; tmp = pow(tmp,d,n); cout<<"解密结果:"<<tmp<<endl; cout<<"\n退出按\"q\",其他任意键继续:"; string a,b="q"; cin>>a; if (a==b) return 0; else{ main(); } return 0;}
此代码需要加入miracl大数库,miracl大数库就度娘吧。
运行环境为linux。
给个运行例子:
ioiu@vovoat ~ $ cd miracl/
ioiu@vovoat ~/miracl $ ./rsa
请输入公钥大数的位数:120
公钥:(33937, 581391457270455374350986417085840243)
私钥:(42366180682730828799917814124458985, 581391457270455374350986417085840243)
请输入加密数据:13123132123
加密结果:562883886171478657222537176357508675
解密结果:13123132123
退出按"q",其他任意键继续:continue
请输入公钥大数的位数:1024
公钥:(37097, 63365584111760012867117869373986248445997539263932411135871142763322559310982732048644492202831432012570698516627561293221730960180262325318767651996871305524296598425358192458573368193348675103036418050678720953231816470495130955506447034349964560585395757071144229636045715778655771304114389514210042446689)
私钥:(35784807050202772988816329174461867669721229414221743356511320076868954836377287554764593138240787682652401378099237380192340718003517689177782093143231353373469268526806259649023818118415817753640906856939745089707816179234742312412061191058666694500310213325231276881602082309476273320885155361504897997433, 63365584111760012867117869373986248445997539263932411135871142763322559310982732048644492202831432012570698516627561293221730960180262325318767651996871305524296598425358192458573368193348675103036418050678720953231816470495130955506447034349964560585395757071144229636045715778655771304114389514210042446689)
请输入加密数据:8051734895710895701489571038945719038457103489571034895710894570138457083457018345701893457018934751389475
加密结果:29322019958141054256886049528306158652742812828885213005768833838672882592080550556761580487462440224815699574681790924154583771670997225196809594748660784352317441364620561664658750803053773291898411342248702146749498749378190900922872573240815467730236791929053638759670378941960608483494996147707590139897
解密结果:8051734895710895701489571038945719038457103489571034895710894570138457083457018345701893457018934751389475
退出按"q",其他任意键继续:
- RSA加/解密算法--miracl大数库实现
- RSA加/解密算法——gmp大数库C++实现
- RSA加/解密算法--python实现
- RSA加解密算法
- RSA 加解密算法
- RSA 加解密算法
- RSA加解密算法
- RSA 加解密算法
- RSA算法加解密(JAVA)
- 解析RSA加解密算法
- RSA加解密算法原理
- Java,RSA加解密算法
- RSA 加解密算法详解
- RSA算法加解密(JAVA)
- RSA算法加解密示例
- java实现的简单RSA加解密算法
- 使用RSA算法实现对数据的加解密
- 【密码学】RSA加解密原理及其Java实现算法
- Effective C++ 摘记(一)
- 相频响应与群延迟
- Effective C++ 摘记(二)
- 动态规划总结
- 棋盘放子——深搜——递归回溯
- RSA加/解密算法--miracl大数库实现
- 模拟频率与数字频率
- HDU 2647Reward(拓扑排序)
- 并行编程之条件变量(posix condition variables)
- 相频响应的物理意义
- Java心跳消息的实现,hadoop的rpc基础(心跳篇)下一篇(rpc通信篇)
- 访问控制 protected, public, private 对比
- 可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术
- Dynamic Range Compression- Basic Tutorial Guide for Beginners