目录
T1.滴啤
下载题目附件,我们获得到以下代码。
from Crypto.Util.number import *
import gmpy2
from flag import flag
def gen_prime(number):
p = getPrime(number//2)
q = getPrime(number//2)
return p,q
m = bytes_to_long(flag.encode())
p,q = gen_prime(1024)
print(p*q)
e = 65537
d = gmpy2.invert(e,(p-1)*(q-1))
print(d%(p-1))
print(pow(m,e,p*q))
# n = 93172788492926438327710592564562854206438712390394636149385608321800134934361353794206624031396988124455847768883785503795521389178814791213054124361007887496351504099772757164211666778414800698976335767027868761735533195880182982358937211282541379697714874313863354097646233575265223978310932841461535936931
# d1 = 307467153394842898333761625034462907680907310539113349710634557900919735848784017007186630645110812431448648273172817619775466967145608769260573615221635
# c = 52777705692327501332528487168340175436832109866218597778822262268417075157567880409483079452903528883040715097136293765188858187142103081639134055997552543213589467751037524482578093572244313928030341356359989531451789166815462417484822009937089058352982739611755717666799278271494933382716633553199739292089
观察代码得到,这是一道DP泄露题。面对DP泄露题的破解关注点就在于对于各个数学关系的利用。大体证明流程如下。
,
那么,我们可以获得
,我们提取出(p-1)。那么上述式子可以简化为:
。于是我们可以通过爆破x来获取得到(p-1),继而得到p。值得一提的是,因为
。可知x应当满足x<e。因此破译脚本如下。
d1 = 307467153394842898333761625034462907680907310539113349710634557900919735848784017007186630645110812431448648273172817619775466967145608769260573615221635
n = 93172788492926438327710592564562854206438712390394636149385608321800134934361353794206624031396988124455847768883785503795521389178814791213054124361007887496351504099772757164211666778414800698976335767027868761735533195880182982358937211282541379697714874313863354097646233575265223978310932841461535936931
e = 65537
d1

博客围绕Python相关密码学题目展开,涉及滴啤、不止一个pi等多个题目。针对不同题目给出破解方法,如DP泄露题利用数学关系爆破获取p;考察欧拉函数的题给出解密脚本;部分题目采用费马费解法、广播攻击等,还介绍了一些解题小技巧。
最低0.47元/天 解锁文章
451

被折叠的 条评论
为什么被折叠?



