ToB企服应用市场:ToB评测及商务社交产业平台

标题: 青少年CTF平台训练密码学 [打印本页]

作者: 水军大提督    时间: 2024-5-12 23:53
标题: 青少年CTF平台训练密码学
凯撒大帝的征讨之路

标题
凯撒大帝在出征之路上留下了这样一串字符,你能通过这串字符得到FLAG并提交吗?
  1. lnixoa{1x2azz7w8axyva7y1z2320vxy6v97v9a}
复制代码
我的解答:
凯撒密码
qsnctf{1c2fee7b8fcdaf7d1e2320acd6a97a9f}
PigPig

标题
这是什么密码呢?得到的结果请加上qsnctf{}后提交。

我的解答:
猪圈密码:http://moersima.00cha.net/zhuquan.asp
在线解码即可。
解个方程

标题
用简单的数学知识来解个方程吧!
  1. 欢迎来到青少年CTF,领取你的题目,进行解答吧!这是一道数学题!!
  2.     p = 289354660472309271657353248544706260479
  3.     q = 57125200079323286870829810458555200169
  4.     e = 65537
  5.     d = ?
  6.    
复制代码
我的解答:
简单的求d
  1. import gmpy2
  2. from Crypto.Util.number import *
  3. p = 289354660472309271657353248544706260479
  4. q = 57125200079323286870829810458555200169
  5. e = 65537
  6. phi = (p-1)*(q-1)
  7. d = gmpy2.invert(e,phi)
  8. print(d)
  9. #7367969462435284192140853832508961738271951882284082089327925279892469405169
复制代码
qsnctf{e30479db5bcd4d6384722647fb42c886}
ez_log

标题
ez_log
注意:请将 key提交到页面内,flag提交到这里来!
  1. from Crypto.Util.number import *
  2. from random import *
  3. flag=b'key{xxxxxxx}'
  4. m=bytes_to_long(flag)
  5. p=3006156660704242356836102321001016782090189571028526298055526061772989406357037170723984497344618257575827271367883545096587962708266010793826346841303043716776726799898939374985320242033037
  6. g=3
  7. c=pow(g,m,p)
  8. print(f'c=',c)
  9.     c=1357929686817757691458037658075453080147729946004559669716645300464681796023905740479827097068963012085529251008676406361905862646171082203012568824221846102704498507134119427563694774055882
复制代码
我的解答:
简单的离散,sage直接梭
  1. from Crypto.Util.number import *
  2. import gmpy2
  3. p=3006156660704242356836102321001016782090189571028526298055526061772989406357037170723984497344618257575827271367883545096587962708266010793826346841303043716776726799898939374985320242033037
  4. c=1357929686817757691458037658075453080147729946004559669716645300464681796023905740479827097068963012085529251008676406361905862646171082203012568824221846102704498507134119427563694774055882
  5. g=3
  6. flag = discrete_log(Mod(c,p),Mod(g,p))
  7. print(long_to_bytes(flag))
  8. #key{uDujFo}
  9. #qsnctf{82bbfdce553f48eb936b3a6c2b3771b1}
复制代码
ezrsa

标题
这个n怎么分解呢?
  1. from Crypto.Util.number import *
  2. flag = b'qsnctf{xxx-xxxx-xxxx-xxxx-xxxxxxxxx}'
  3. m = bytes_to_long(flag)
  4. p = getPrime(512)
  5. q = getPrime(512)
  6. r = getPrime(512)
  7. n = p * q * r
  8. leak = p * q
  9. e = 0x10001
  10. c = pow(m, e, n)
  11. print(f'c = {c}')
  12. print(f'n = {n}')
  13. print(f'leak = {leak}')
  14. # c = 173595148273920891298949441727054328036798235134009407863895058729356993814829340513336567479145746034781201823694596731886346933549577879568197521436900228804336056005940048086898794965549472641334237175801757569154295743915744875800647234151498117718087319013271748204766997008772782882813572814296213516343420236873651060868227487925491016675461540894535563805130406391144077296854410932791530755245514034242725719196949258860635915202993968073392778882692892
  15. # n = 1396260492498511956349135417172451037537784979103780135274615061278987700332528182553755818089525730969834188061440258058608031560916760566772742776224528590152873339613356858551518007022519033843622680128062108378429621960808412913676262141139805667510615660359775475558729686515755127570976326233255349428771437052206564497930971797497510539724340471032433502724390526210100979700467607197448780324427953582222885828678441579349835574787605145514115368144031247
  16. # leak = 152254254502019783796170793516692965417859793325424454902983763285830332059600151137162944897787532369961875766745853731769162511788354655291037150251085942093411304833287510644995339391240164033052417935316876168953838783742499485868268986832640692657031861629721225482114382472324320636566226653243762620647
复制代码
我的解答:
这题已经是老生常谈了。直接在模r下算即可。
  1. from Crypto.Util.number import *
  2. import gmpy2
  3. c = 173595148273920891298949441727054328036798235134009407863895058729356993814829340513336567479145746034781201823694596731886346933549577879568197521436900228804336056005940048086898794965549472641334237175801757569154295743915744875800647234151498117718087319013271748204766997008772782882813572814296213516343420236873651060868227487925491016675461540894535563805130406391144077296854410932791530755245514034242725719196949258860635915202993968073392778882692892
  4. n = 1396260492498511956349135417172451037537784979103780135274615061278987700332528182553755818089525730969834188061440258058608031560916760566772742776224528590152873339613356858551518007022519033843622680128062108378429621960808412913676262141139805667510615660359775475558729686515755127570976326233255349428771437052206564497930971797497510539724340471032433502724390526210100979700467607197448780324427953582222885828678441579349835574787605145514115368144031247
  5. leak = 152254254502019783796170793516692965417859793325424454902983763285830332059600151137162944897787532369961875766745853731769162511788354655291037150251085942093411304833287510644995339391240164033052417935316876168953838783742499485868268986832640692657031861629721225482114382472324320636566226653243762620647
  6. e=65537
  7. r = n//leak
  8. phi = r-1
  9. d = gmpy2.invert(e,phi)
  10. m = pow(c,d,r)
  11. print(long_to_bytes(m))
  12. #qsnctf{12ff81e0-7646-4a96-a7eb-6a509ec01c9e}
复制代码
四重加密

标题
简单的加密信赖大家都会,请将最后的答案格式改为:qsnctf{flag}
我的解答:
压缩包密码base解码:qsnctf
  1. zcye{mxmemtxrzt_lzbha_kwmqzec}|key=hello
复制代码
HTML解码
zcye{mxmemtxrzt_lzbha_kwmqzec}|key=hello
维吉尼亚解码
synt{yqitbfqnoi_xsxwp_wpifoqv}
ROT13解码
flag{ldvgosdabv_kfkjc_jcvsbdi}
factor1

标题
这个e咋比n还大啊
  1. import gmpy2
  2. import hashlib
  3. from Crypto.Util.number import *
  4. p = getPrime(512)
  5. q = getPrime(512)
  6. d = getPrime(256)
  7. e = gmpy2.invert(d, (p**2 - 1) * (q**2 - 1))
  8. flag = "qsnctf{" + hashlib.md5(str(p + q).encode()).hexdigest() + "}"
  9. print(e)
  10. print(p * q)
  11. # 4602579741478096718172697218991734057017874575484294836043557658035277770732473025335441717904100009903832353915404911860888652406859201203199117870443451616457858224082143505393843596092945634675849883286107358454466242110831071552006337406116884147391687266536283395576632885877802269157970812862013700574069981471342712011889330292259696760297157958521276388120468220050600419562910879539594831789625596079773163447643235584124521162320450208920533174722239029506505492660271016917768383199286913178821124229554263149007237679675898370759082438533535303763664408320263258144488534391712835778283152436277295861859
  12. # 78665180675705390001452176028555030916759695827388719494705803822699938653475348982551790040292552032924503104351703419136483078949363470430486531014134503794074329285351511023863461560882297331218446027873891885693166833003633460113924956936552466354566559741886902240131031116897293107970411780310764816053
复制代码
我的解答:
Wiener's Attack求d,然后根据n e d分解p q
  1. import gmpy2
  2. import libnum
  3. import hashlib
  4. import random
  5. def continuedFra(x, y):
  6.     cf = []
  7.     while y:
  8.         cf.append(x // y)
  9.         x, y = y, x % y
  10.     return cf
  11. def gradualFra(cf):
  12.     numerator = 0
  13.     denominator = 1
  14.     for x in cf[::-1]:
  15.         numerator, denominator = denominator, x * denominator + numerator
  16.     return numerator, denominator
  17. def solve_pq(a, b, c):
  18.     par = gmpy2.isqrt(b * b - 4 * a * c)
  19.     return (-b + par) // (2 * a), (-b - par) // (2 * a)
  20. def getGradualFra(cf):
  21.     gf = []
  22.     for i in range(1, len(cf) + 1):
  23.         gf.append(gradualFra(cf[:i]))
  24.     return gf
  25. def wienerAttack(e, n):
  26.     cf = continuedFra(e, n)
  27.     gf = getGradualFra(cf)
  28.     for d, k in gf:
  29.         if k == 0: continue
  30.         if (e * d - 1) % k != 0:
  31.             continue
  32.         phi = (e * d - 1) // k
  33.         p, q = solve_pq(1, n - phi + 1, n)
  34.         if p * q == n:
  35.             return d
  36. e=4602579741478096718172697218991734057017874575484294836043557658035277770732473025335441717904100009903832353915404911860888652406859201203199117870443451616457858224082143505393843596092945634675849883286107358454466242110831071552006337406116884147391687266536283395576632885877802269157970812862013700574069981471342712011889330292259696760297157958521276388120468220050600419562910879539594831789625596079773163447643235584124521162320450208920533174722239029506505492660271016917768383199286913178821124229554263149007237679675898370759082438533535303763664408320263258144488534391712835778283152436277295861859
  37. n=78665180675705390001452176028555030916759695827388719494705803822699938653475348982551790040292552032924503104351703419136483078949363470430486531014134503794074329285351511023863461560882297331218446027873891885693166833003633460113924956936552466354566559741886902240131031116897293107970411780310764816053
  38. d=wienerAttack(e, n**2)
  39. print('d=',d)
  40. k = e * d - 1
  41. r = k
  42. t = 0
  43. while True:
  44.     r = r // 2
  45.     t += 1
  46.     if r % 2 == 1:
  47.         break
  48. success = False
  49. for i in range(1, 101):
  50.     g = random.randint(0, n)
  51.     y = pow(g, r, n)
  52.     if y == 1 or y == n - 1:
  53.         continue
  54.     for j in range(1, t):
  55.         x = pow(y, 2, n)
  56.         if x == 1:
  57.             success = True
  58.             break
  59.         elif x == n - 1:
  60.             continue
  61.         else:
  62.             y = x
  63.     if success:
  64.         break
  65.     else:
  66.         continue
  67. if success:
  68.     p = libnum.gcd(y - 1, n)
  69.     q = n // p
  70.     print ('P: ' + '%s' % p)
  71.     print ('Q: ' + '%s' % q)
  72.     hash_result = hashlib.md5(str(p + q).encode()).hexdigest()
  73.     print(b'qsnctf{' + hash_result.encode() + b'}')
  74. else:
  75.     print ('Cannot compute P and Q')
  76. #qsnctf{8072e8b2982bc729cc74ef58f1abc862}
  77.    
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4