看雪CTF-EasyRsa解题
- 题目来源:http://kctf.kanxue.com/challenges
- RSA有很多中类型的密码题,本文仅作最简单的一种介绍,也正如看雪的EasyRSA题一样,简单的RSA。
- 想详细其他RSA知识的的可以看下kx论坛的这篇文章:https://bbs.kanxue.com/thread-263069-1.htm
- 从这篇文章我们可以看到有同本题类似的一题,通过公式即可直接得出D,接下来观察我们本题。
从图中我们我们可以看到,PQE并不是我们常见的十进制值,如123,-123,0等等一些值。或者说和上图中一样的数值。而是字母+数字的组合(老鸟应该一眼就能看出来是十六进制(hex)了)。
- 得知是十六进制之后,我们开始写脚本,进行计算。这边也可以使用工具去进行计算(推荐使用rsatool。工具地址:https://github.com/ius/rsatool)。
脚本实现
import gmpy2
p = 'A890768DCF26582145A87B24BE722E9B'
q = '8DD7C2DCB43AC1945F668E72F058EBBB'
e = '10001'
#我们将十六进制转换为10进制进行计算
p_decimal = int(p,16)
q_decimal = int(q,16)
e_decimal = int(e,16)
phi = (p_decimal-1)*(q_decimal-1)
d = gmpy2.invert(e_decimal,phi)
#最后输出十六进制的D
print(hex(d))
输出结果
rsatool实现(其实也是写好的脚本)
- 看一下他的使用方法,python rsatool.py +选项 参数
我们直接调用,这里应为我们的p,q,e是十六进制,所以参数前要+0x(代表十六进制数),有又应为十六进制的10001就是65537,rsatool这个工具的E值默认就是65537我们就输入p和q就求解出D了。
python .\rsatool.py -p 0xA890768DCF26582145A87B24BE722E9B -q 0x8DD7C2DCB43AC1945F668E72F058EBBB
—————————————————————————————————————————至此,本题结束。