RSA2(2)

Hello world,hello blog!

Posted by 吴柚 on April 18, 2019

解题过程

昨天解出密钥的一些特定值,如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,导致出了错误。