网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月01日漏签0天
c语言吧 关注:799,060贴子:4,359,781
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 3回复贴,共1页
<<返回c语言吧
>0< 加载中...

求大佬带RSA相关程序

  • 只看楼主
  • 收藏

  • 回复
  • Mike糖糖
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1计算密钥、2退出、3加密、4解密
执行:1计算密钥
请输入P和Q:
公钥为:
私钥为:
d=,e=,r=
1计算密钥、2退出、3加密、4解密
执行:3加密
请输入e和r:
请输入明文:
密文为:
1计算密钥、2退出、3加密、4解密
执行:4解密
请输入d和r:
请输入密文:
明文为:
大概就是这样一个执行结果图,有偿


  • simulacrumbd
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
P,Q是质数,实际使用时最好设置得大一点
公钥是自己设置的,最好是比P和Q大的质数再mod(P-1)(Q-1)
我默认设置的1000000007去模
r=PQ,明文不能超过r,也是PQ要取大的原因
密文=明文的e次方 % r;
明文=密文的d次方 % r;
#include <stdio.h>
#include <string>
#include <iostream>
#include <time.h>
#include <math.h>
#include <sys/timeb.h>
#include <set>
#include <conio.h>
#include <vector>
#include <fstream>
using namespace std;
typedef long long ll;
void exgcd(ll, ll, ll&, ll&);
void fun1();
void fun3();
void fun4();
ll pooow(ll a, ll b, ll r);
ll P=1, Q=1, x, y;
int main()
{
int choose;
while (1)
{
printf("1计算密钥、2退出、3加密、4解密");
scanf("%d", &choose);
switch (choose)
{
case 1: {
fun1();
break;
}
case 2:return 0;
case 3:fun3(); break;
case 4:fun4(); break;
default:continue;
}
}
cout << x << y << endl;
// scanf("%lld%lld", &P, &Q);
return 0;
}
void exgcd(ll a, ll b,ll& x,ll& y)
{
if (a == 0)
{
x = 0;
y = 1;
return;
}
exgcd((b%a), a, x,y);
ll temp = y;
y = x;
x = temp - (b / a)*y;
}
void fun1()
{
printf("请输入P和Q:");
scanf("%lld%lld", &P, &Q);
ll k = 1000000007 % ((P - 1)*(Q - 1));
printf("公钥为:%lld\n",k);
exgcd(k, (P - 1)*(Q - 1), x, y);
x %= (P - 1)*(Q - 1);
if(x<0)
x += (P - 1)*(Q - 1);
printf("私钥为:%lld\n", x);
printf("d=%lld,e=%lld,r=%lld\n", x, k, P*Q);
return;
}
void fun3()
{
ll e, r, m, c;
printf("请输入e和r:");
scanf("%lld%lld", &e, &r);
printf("请输入明文:");
scanf("%lld", &m);
c = pooow(m, e, r);
printf("密文为:%lld\n", c);
return;
}
void fun4()
{
ll d, r, m, c;
printf("请输入d和r:");
scanf("%lld%lld", &d, &r);
printf("请输入密文:");
scanf("%lld", &c);
m = pooow(c, d, r);
printf("明文为:%lld\n", m);
return;
}
ll pooow(ll a, ll b, ll r)
{
ll ans = 1;
while (b)
{
if (b & 1)
{
ans = (ans*a) % r;
a = (a*a) % r;
b >>= 1;
}
else
{
a = (a * a) % r;
b >>= 1;
}
}
return ans;
}


2025-09-01 12:55:20
广告
不感兴趣
开通SVIP免广告
  • 上官婉儿无心
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
还要


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示