题目名:LazyRSA
分类:Crypto
来源:moectf
链接:https://www.moectf.online/challenges
思路:
拿到题目的python源代码后,发现是一个对flag进行RSA加密的脚本,且源代码在注释中给出相关的密文c,加密用到的中间量p,q,e。
根据RSA的相关知识,构造解密脚本,代入p,q,e对c进行解密即可拿到flag。
RSA相关加密解密方法:
https://baike.baidu.com/item/RSA%E7%AE%97%E6%B3%95/263310?fromtitle=RSA&fromid=210678&fr=aladdin
以下为题目给出的python源代码:
flag = xxx
m = bytes_to_long(flag)
c = pow(m,e,n)
print("p = " , p)
print("q = " , q)
print("c = " , c)
'''
p = 7049120988661090136959367990211624032671088374397430253722914704672269343351268486642692858477617370573493581346846411168539408811542592351582581576539221
q = 11595461299251293002401295606096202123601375776115430944343338141843770078346355504245510150744085418550473572002573306023521368183889972175846278163010889
c = 48425576447741107904942007362859939933300480519833273210397511573241220126734053813936424490872852942885069257318462762079636783871415500644717758273774268724488497979368196170897933989184449432995120246590652553995031347596620505647525475638040859263109628716173897321613612254357251120398449111747305089380
'''
以下为自己写的解密脚本:
from Crypto.Util.number import*
p = 7049120988661090136959367990211624032671088374397430253722914704672269343351268486642692858477617370573493581346846411168539408811542592351582581576539221
q = 11595461299251293002401295606096202123601375776115430944343338141843770078346355504245510150744085418550473572002573306023521368183889972175846278163010889
c = 48425576447741107904942007362859939933300480519833273210397511573241220126734053813936424490872852942885069257318462762079636783871415500644717758273774268724488497979368196170897933989184449432995120246590652553995031347596620505647525475638040859263109628716173897321613612254357251120398449111747305089380
n = p*q
e = 0x10001
k = 1
while True:
if (k*(p-1)*(q-1)+1)%e == 0:
d = (k*(p-1)*(q-1)+1)//e
break
else:
k += 1
m = pow(c, d, n)
flag = long_to_bytes(m)
print(flag)



