参考文献: CTF-I春秋第二届春秋欢乐赛-CRYPTO-RSA256_he110_Z的博客-CSDN博客
题目
下载下来之后可以看到有以下文件夹以及文件:
public.key
文件内容:
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMKEgmFJGXaWeS3H/TOZ/AEqmPxU4ie6
MDUBJayBXccFAgMBAAE=
-----END PUBLIC KEY-----
解题过程
分析密钥
key的格式为ASN.1。ASN.1与RSA之间的关系可参考此篇博文(RSA的公钥和私钥的ASN.1编码_wzj_whut的专栏-CSDN博客)
方法一:ASN.1 在线解析网站http://lapo.it/asn1js/
方法二:利用kali进行解码
root@kali:/mnt/hgfs/CTF/Crypto/fujian_C74892BD664A142AF1F7F85F55754BCF/fujian# openssl rsa -pubin -text -modulus -in ./public.key
RSA Public-Key: (256 bit)
Modulus:
00:d9:9e:95:22:96:a6:d9:60:df:c2:50:4a:ba:54:
5b:94:42:d6:0a:7b:9e:93:0a:ff:45:1c:78:ec:55:
d5:55:eb
Exponent: 65537 (0x10001)
Modulus=D99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB
writing RSA key
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhANmelSKWptlg38JQSrpUW5RC1gp7npMK
/0UceOxV1VXrAgMBAAE=
-----END PUBLIC KEY-----
上方结果中
Exponent
为e
,Modulus
为n
的16进制数,需将其转换成10进制数
获取到数据如下:
(十制)N=87982816287542607821348020319142008042005562918106976160430773236821410039557 E=65537要想解密数据需要私钥D,要计算私钥D,则需要分解N,得到素数P,Q。
分解N
在线分解大数地址:http://factordb.com/
使用Python脚本进行解密
Python脚本如下:
#python3.6
import gmpy2
import rsa
p = 274473488606178722897600533120866465659
q = 320551236967671239609994506214257226623
n = 87982816287542607821348020319142008042005562918106976160430773236821410039557
e = 65537
d = int(gmpy2.invert(e , (p-1) * (q-1)))
key = rsa.PrivateKey(n , e , d , p , q)
with open("message.encrypted" , "rb") as f1:
str1=rsa.decrypt(f1.read(), key).decode()
print(str1)
运行结果即为flag。