题目:
flag_encry1:
螲繓r??28爔#_f鑑V枫戟>?靆鰵?崃mk?k稽jRL@f_離峹??$?"鰌'曣誨?磈j鵾 挬"^>a4?缆鰿t?檣駼'?铯鮗籊邆w咗?玈獥鉹谸?饏s}?U4z?澴?F牶劰BS?,衃F=nP?
譅Q%(?y価?簃覮=€w]mWg嗧糢?]b?S菾?跹瑂a.鞸寖娿饟~'uN?D7
5斨C?Au>羋T??y(DM
flag_encry2:
?繨楺o偈?n(汏E*A聦t??`N`搯痲>0gh茅翭V筇旎畨 ?雧翍Om袥bZ?4鶒懍
x趽巂\紧Z€_┅颌J魓?汕苤t4q??aR幚鯞腻s'仩愓楫? sZ酨A咓蝘玧?留S?瓘顂eJv$洶[ yD噓蟟K棠嶅э毽 頶??e姲H屁3倔擿In6?弈Z跟誺F蠎 @偖??~v圣V??@`3扲瑭ir^?嘭l舑-繇?
public1:
-----BEGIN PUBLIC KEY-----
MIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAQAma/gXML+bivU20mJu55PZ
SjNAE6S0PQ2WV5sYIA7ZLbJ6lshW8cfohErN0TUIv+6O+hXSMFd4wrv27+f6akPE
qeNL6LWjKqcnC9I03vbyYDZuLkfeoPwM9UHIuRUfU/l/LDOCkjkOkHN5SMufg66y
OGc4wLDi9f8sET4QMerAVF/HZ7acpYYCu8QoWnOSy9KiVzKQMzKkaL+WcN2sbLsA
61zjixv7ybMHDmcyMKHb5VbfPsqMW19roYLV5luY3SlrhTogmyGg19Q3k7hYW3ca
Jc7WLEbPD/OnlHMDLArNUYMyB9t0CdLNZZCHE6pbiMaNGS+rwGcqxHbWCpGCS0vZ
AoIBAA0zxRVob0N2SXRSPv7GRHMzj/mpACiz3VrKtwKgm+MM1UrnvbtCpPcqjqw6
4w7HJqf6O/ccA7l0qY35jbvhOLD2II6rf8USZwkm27ygOuHA3SRS9XZyzpshUmRO
YyJtogGntK4R9R7wfW1HHJbIj5R3/HV/gYdT9XxKq7yICxFSVv3u1lgVBjNeUzTn
5MzOlX9tCEjcS54eq9OCGLEIetj24xTfsruKf/DDGNTRA1et8fU4H49NMsqqHL1R
ZdKvy1SEBWoOrj/XQycz0Dsyre0jcaDWnaywlulHGrPKXYc6ePAJ9S7IMOTKblCf
FU9nj28KAsm/RBAV3PEMkJ3edPM=
-----END PUBLIC KEY-----
public2:
-----BEGIN PUBLIC KEY-----
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQASwScpBgKVbfU6JjRoIA9v
JkVCapA5hkllstoPZhO6T1mQZK5DSD+ggwMXu/Ivfa3qKsnQ9zFrvIULjWk52+/+
q1sckgVNXKE9K8RREuj0ChN1Qzx24dpmtz60ObxxQESRkSpLD8wvDTurAd1rolaK
qqS2uXxv9CzbrMzSZOD1UDEmKa/JSXy3YvQ67S4c3NOQVgwHcAmQuqWZTmVuFxsb
l1hwmWSPMgTcNkFpMcjeCx0+DuuN/lTqQWFygJGBRnAvLwSpXUuq747FQiilca5P
+7fiz2Tb2OEn2/WE41vjqMVHUjGxY+RseDpND71FOvkGl8ixWEq8ebflkadtVcK1
AgMBAAE=
-----END PUBLIC KEY-----
首先,我们审计题目,可以发现题目给了我们两组不同的c值,在打开c的文件后,c是不可见的,需要我们去对他进行解码,ne就是典型的公匙提取:
一、提取出我们所需的c
with open('flag_encry1','br')as f:
f1=f.read()
c1=bytes_to_long(f1)
with open('flag_encry2','br')as f:
f1=f.read()
c2=bytes_to_long(f1)
二、提取公匙:
n,e=[],[]
for i in range(1,3):
with open('public'+str(i)+'.pub','rb')as f:
key = RSA.importKey(f.read())
e.append(key.e)
n.append(key.n)
三、找到两组题目给我们的数据后,下一步就是找出p,q值:
1、我们可以发现n1和n2有最大公约数
2、对n的取值查看其安全性,尝试分解
1
n1=n[0]
n2=n[1]
e1=e[0]
e2=e[1]
p=gmpy2.gcd(n1,n2)
q=n2//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e2,phi)
print(long_to_bytes(gmpy2.powmod(c2,d,n2)))
2
进行与上一个相似的操作即可;
得到:
OpenSSL is widely used\r\nflag is afctf{You_Know_0p3u55I}'