解题过程
昨天解出密钥的一些特定值,如q、p、n、e、d,所以只需要使用这些要素将对应的私钥求出即可。
本来想使用Python脚本来输出私钥,但是脚本一直出错,我也不清楚哪里出了错误,这里给出脚本作为参考。
import sys
import math
from Crypto.PublicKey import RSA
keypair = RSA.generate(1024)
keypair.p = 275127860351348928173285174381581152299
keypair.q = 319576316814478949870590164193048041239
keypair.e = 65537
keypair.n = 87924348264132406875276140514499937145050893665602592992418171647042491658461
keypair.d = 93076836824908620642628594590464850812511038475673825979968428923835223225430811644363358529
private = open('private.pem','w')
private.write(keypair.exportKey())
private.close()
由于脚本不行,所以考虑使用rsatool工具进行输出私钥。
首先在Linux系统里安装rsatool。
sudo apt-get install libgmp-dev
pip install gmpy
git clone https://github.com/ius/rsatool.git
cd rsatool
python setup.py install
然后就可以使用rsatool来输出私钥。
python rsatool.py -f PEM -o pri.pem -p 275127860351348928173285174381581152299 -q 319576316814478949870590164193048041239 -e 65537
然后使用openssl工具,使用私钥对加密文件进行解密。rsautl -in flag.encrypt -inkey private_key.pem -out flag.txt -decrypt -raw
这里有一个需要注意的点,python 生成的私钥是无填充模式的,所以在用opensll 解密时需要设置一下“无填充模式”[-raw],我先前没有加-raw,导致出了错误。