HGAME 2024 WEEK1 Crypto Misc

打印 上一主题 下一主题

主题 912|帖子 912|积分 2736

CRYPTO(已解决3/4)

ezRSA

题目描述:一个简单的RSA
  1. from Crypto.Util.number import *
  2. from secret import flag
  3. m=bytes_to_long(flag)
  4. p=getPrime(1024)
  5. q=getPrime(1024)
  6. n=p*q
  7. phi=(p-1)*(q-1)
  8. e=0x10001
  9. c=pow(m,e,n)
  10. leak1=pow(p,q,n)
  11. leak2=pow(q,p,n)
  12. print(f'leak1={leak1}')
  13. print(f'leak2={leak2}')
  14. print(f'c={c}')
  15. """
  16. leak1=149127170073611271968182576751290331559018441805725310426095412837589227670757540743929865853650399839102838431507200744724939659463200158012469676979987696419050900842798225665861812331113632892438742724202916416060266581590169063867688299288985734104127632232175657352697898383441323477450658179727728908669
  17. leak2=116122992714670915381309916967490436489020001172880644167179915467021794892927977272080596641785569119134259037522388335198043152206150259103485574558816424740204736215551933482583941959994625356581201054534529395781744338631021423703171146456663432955843598548122593308782245220792018716508538497402576709461
  18. c=10529481867532520034258056773864074017027019578041866245400647840230251661652999709715919620810933437191661180003295923273655675729588558899592524235622728816065501918076120812236580344991140980991532347991252705288633014913479970610056845543523591324177567061948922552275235486615514913932125436543991642607028689762693617305246716492783116813070355512606971626645594961850567586340389705821314842096465631886812281289843132258131809773797777049358789182212570606252509790830994263132020094153646296793522975632191912463919898988349282284972919932761952603379733234575351624039162440021940592552768579639977713099971
  19. """
复制代码
我的解答:
根据题目关系式我们可以写出:
leak1 = pq mod q
leak2 = qp mod p
根据费马小定理:
ap−1 ≡ 1 mod p
推出:
leak1 = p
leak2 = q
exp:
  1. import gmpy2
  2. from Crypto.Util.number import *
  3. p=149127170073611271968182576751290331559018441805725310426095412837589227670757540743929865853650399839102838431507200744724939659463200158012469676979987696419050900842798225665861812331113632892438742724202916416060266581590169063867688299288985734104127632232175657352697898383441323477450658179727728908669
  4. q=116122992714670915381309916967490436489020001172880644167179915467021794892927977272080596641785569119134259037522388335198043152206150259103485574558816424740204736215551933482583941959994625356581201054534529395781744338631021423703171146456663432955843598548122593308782245220792018716508538497402576709461
  5. c= 10529481867532520034258056773864074017027019578041866245400647840230251661652999709715919620810933437191661180003295923273655675729588558899592524235622728816065501918076120812236580344991140980991532347991252705288633014913479970610056845543523591324177567061948922552275235486615514913932125436543991642607028689762693617305246716492783116813070355512606971626645594961850567586340389705821314842096465631886812281289843132258131809773797777049358789182212570606252509790830994263132020094153646296793522975632191912463919898988349282284972919932761952603379733234575351624039162440021940592552768579639977713099971
  6. e = 65537
  7. n = p*q
  8. phi = (p-1) * (q-1)
  9. d = gmpy2.invert(e, phi)
  10. m = pow(c, d, n)
  11. print(long_to_bytes(m))
  12. #hgame{F3rmat_l1tt1e_the0rem_is_th3_bas1s}
复制代码
ezMath

题目描述:一个简单的数学题
  1. from Crypto.Util.number import *
  2. from Crypto.Cipher import AES
  3. import random,string
  4. from secret import flag,y,x
  5. def pad(x):
  6.     return x+b'\x00'*(16-len(x)%16)
  7. def encrypt(KEY):
  8.     cipher= AES.new(KEY,AES.MODE_ECB)
  9.     encrypted =cipher.encrypt(flag)
  10.     return encrypted
  11. D = 114514
  12. assert x**2 - D * y**2 == 1
  13. flag=pad(flag)
  14. key=pad(long_to_bytes(y))[:16]
  15. enc=encrypt(key)
  16. print(f'enc={enc}')
  17. #enc=b"\xce\xf1\x94\x84\xe9m\x88\x04\xcb\x9ad\x9e\x08b\xbf\x8b\xd3\r\xe2\x81\x17g\x9c\xd7\x10\x19\x1a\xa6\xc3\x9d\xde\xe7\xe0h\xed/\x00\x95tz)1\\\t8:\xb1,U\xfe\xdec\xf2h\xab`\xe5'\x93\xf8\xde\xb2\x9a\x9a"
复制代码
我的解答:
考点:佩尔方程
解方程得到y,然后AES即可。
exp:
  1. # sage
  2. from Crypto.Util.number import *
  3. from Crypto.Cipher import AES
  4. a = 1
  5. b = 114514
  6. enc=b"\xce\xf1\x94\x84\xe9m\x88\x04\xcb\x9ad\x9e\x08b\xbf\x8b\xd3\r\xe2\x81\x17g\x9c\xd7\x10\x19\x1a\xa6\xc3\x9d\xde\xe7\xe0h\xed/\x00\x95tz)1\\\t8:\xb1,U\xfe\xdec\xf2h\xab`\xe5'\x93\xf8\xde\xb2\x9a\x9a"
  7. numTry = 1500
  8. def solve_pell(N, numTry):
  9.     cf = continued_fraction(sqrt(N))
  10.     for i in range(numTry):
  11.         denom = cf.denominator(i)
  12.         numer = cf.numerator(i)
  13.         if numer^2 - N * denom^2 == 1:
  14.             return numer, denom
  15.     return None, None
  16. def pad(x):
  17.     return x+b'\x00'*(16-len(x)%16)
  18. N = b//a
  19. x,y = solve_pell(N,numTry)
  20. print(y)
  21. key = pad(long_to_bytes(y))[:16]
  22. cipher = AES.new(key,AES.MODE_ECB)
  23. flag = cipher.decrypt(enc)
  24. print(flag)
  25. # hgame{G0od!_Yo3_k1ow_C0ntinued_Fra3ti0ns!!!!!!!}
复制代码
 ezPRNG

题目描述:一个简单的随机数
[code]from Crypto.Util.number import *import uuiddef PRNG(R,mask):    nextR = (R
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表