0%

i春秋 第二届春秋欢乐赛 RSA256 Writeup

解压

解压得到四个文件,有一个public.key和三个加密过的文件,于是先把p和q解出来

得到e和n

openssl rsa -pubin -text -modulus -in warmup -in public.key
得到

1
2
Exponent: 65537 (0x10001)
Modulus=D99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB

使用yafu分解,得到p和q

1
2
p = 302825536744096741518546212761194311477
q = 325045504186436346209877301320131277983

求出d

使用gmpy

解密并打印出flag

使用rsa模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import rsa

n = 0xD99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB
e = 0x10001
p = 302825536744096741518546212761194311477
q = 325045504186436346209877301320131277983
d = 0x4547B732CBC3527104CB57C4728D6899B44C4994FAE2713D6B594BC0F522A41
ret = ""
privatekey = rsa.PrivateKey(n , e , d , p , q)
with open("encrypted.message1" , "rb") as f:
ret += (rsa.decrypt(f.read(), privatekey).decode())
with open("encrypted.message2" , "rb") as f:
ret += (rsa.decrypt(f.read(), privatekey).decode())
with open("encrypted.message3" , "rb") as f:
ret += (rsa.decrypt(f.read(), privatekey).decode())
print(ret)

得到

1
2
3
flag{3b6d3806-4b2b
-11e7-95a0-
000c29d7e93d}

去掉回车得到最终flag

不使用rsa模块

其实就是自己实现rsa.decrypt中的转换16进制操作
以第一个文件为例,解密出来转化为16进制:
25a8007e9ad2809abbf5a00666c61677b33623664333830362d346232620a
位数为奇数,所以左边补0,得到
025a8007e9ad2809abbf5a00666c61677b33623664333830362d346232620a
转换为ascii码得到
Z��( ��Z�flag{3b6d3806-4b2b

剩下文件同理

参考

i春秋第二届春秋欢乐赛RSA256writeup