2023-11-06 18:30阅读: 217评论: 0推荐: 0

Crypto_BUUCTF_WriteUp | RSA

题目(原题的拼写错误)

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

分析

回顾一下 RSA 算法描述:

RSA 算法的具体描述如下:
(1)任意选取两个不同的大素数 p 和 q 计算乘积 n=pq,φ(n)=(p1)(q1)
(2)任意选取一个大整数 e,满足 gcd(e,φ(n))=1,整数 e 用做加密钥(注意:e 的选取是很容易的,例如,所有大于 p 和 q 的素数都可用);
(3)确定的解密钥 d,满足 (de)modφ(n)=1,即 de=kφ(n)+1,k1 是一个任意的整数;所以,若知道 e 和 φ(n),则很容易计算出 d;
(4)公开整数 n 和 e,秘密保存 d;
(5)将明文 m(m<n 是一个整数)加密成密文 c,加密算法为

c=E(m)=memodn

(6)将密文 c 解密为明文 m,解密算法为

m=D(c)=cdmodn

然而只根据 n 和 e(注意:不是 p 和 q)要计算出 d 是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道 d)才可对密文解密。

根据描述编写解密代码:

long long p = 473398607161;
long long q = 4511491;
int e = 17;
long long d = -1;
long long varphi = (p - 1) * (q - 1);
// de = kφ(n) + 1
int k = 1;
while (1) {
if ((k * varphi + 1) % e == 0) {
printf("%lld", (k * varphi + 1) / e);
break;
}
}
return 0;

得到 flag 内容,套壳提交。

Flag

flag{125631357777427553}

参考

RSA算法

本文作者:Guanz

本文链接:https://www.cnblogs.com/Guanz/p/17813414.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Guanz  阅读(217)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起