PolarD&N2023秋季个人挑战—Crypto全解

锦通  金牌会员 | 2023-11-12 08:59:52 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 894|帖子 894|积分 2682

EasyRSA

(额。。这个题看错了不是挑战赛的。这里当做好题记录下来了)
题目信息:500 分 5 Polar币
  1. from Crypto.Util.number import bytes_to_long, long_to_bytes, getPrime
  2. import gmpy2, os
  3. p = getPrime(512)
  4. q = getPrime(512)
  5. n = p*q
  6. e = 65537
  7. c = pow(flag1,e,n)
  8. print(hex(n).strip("L"))
  9. print(hex(c).strip("L"))
  10. q = getPrime(512)
  11. n = p*q
  12. c = pow(flag2,e,n)
  13. print(hex(n).strip("L"))
  14. print(hex(c).strip("L"))
  15. # 0x6364991c9ff97120fa450866ab1a3a0bd4e16bd71c8f7a0a4229b1307531fef6e2cb2410c3283db91e49476a8afcd590aedc3384b5045b2fb57208587a242e94e7528ea4998b66f3a57c7ac66b806d9631f8cff3e73557630a0e70467b5f6246ee3fbc6ed89d00af1e931cfabbc5f1deddb99a14dfac51820ffe48f2841bc1a1
  16. # 0x17343966398f483e121de6c2515d630ebc31b0cbdbed5cdc2c09c2b253fc0bc9a055e222eac108e189b6bd6a705d2972c5ce435fa5a4469602bb7a0d0ee95c3f397a3fa4985e6cb7531eb1b5603be134d0dce2c47069d216063b5aea135681edebcfb20c86c3ab09c350901639ee5f74831b056b33c7c26fcef7a34fd39e9dab
  17. # 0x4bf20122dc9f3fbd31bf4389d2a497392caa3de045fe217b692620874ce7a63146c6348c3f65a08bd3f9ec893236e904ceac4e54acdf04e198e7d2bb085c4d646be300158bafc27615875f65d2d1b196d14c024de581f511519631da1d727d6b4fd9c02298b6334938e5a6a7616389948fb9f35677fad6d596d95e5e67aa5549
  18. # 0x2583826196498e3c4b5e1c9c967a74337e85f2b4f9827f2e0a164e3923644a3859c85bf8248ddfcb90f03c31f8704548d7dfd071581eee8a268ef715f93636485b56e559eef55ceee7a54706cf12717d035cc1f6fca838e8ce32fcbd413565ff78500c9810ff8c22ae09d3746b927b4768fc92e6d46a2dfb395cd14ae1321fd0
复制代码
n不互素问题,利用欧几里得求公约数
exp:
  1. import gmpy2
  2. import binascii
  3. e = 65537
  4. n1 = 0x6364991c9ff97120fa450866ab1a3a0bd4e16bd71c8f7a0a4229b1307531fef6e2cb2410c3283db91e49476a8afcd590aedc3384b5045b2fb57208587a242e94e7528ea4998b66f3a57c7ac66b806d9631f8cff3e73557630a0e70467b5f6246ee3fbc6ed89d00af1e931cfabbc5f1deddb99a14dfac51820ffe48f2841bc1a1
  5. c1 = 0x17343966398f483e121de6c2515d630ebc31b0cbdbed5cdc2c09c2b253fc0bc9a055e222eac108e189b6bd6a705d2972c5ce435fa5a4469602bb7a0d0ee95c3f397a3fa4985e6cb7531eb1b5603be134d0dce2c47069d216063b5aea135681edebcfb20c86c3ab09c350901639ee5f74831b056b33c7c26fcef7a34fd39e9dab
  6. n2 = 0x4bf20122dc9f3fbd31bf4389d2a497392caa3de045fe217b692620874ce7a63146c6348c3f65a08bd3f9ec893236e904ceac4e54acdf04e198e7d2bb085c4d646be300158bafc27615875f65d2d1b196d14c024de581f511519631da1d727d6b4fd9c02298b6334938e5a6a7616389948fb9f35677fad6d596d95e5e67aa5549
  7. c2 = 0x2583826196498e3c4b5e1c9c967a74337e85f2b4f9827f2e0a164e3923644a3859c85bf8248ddfcb90f03c31f8704548d7dfd071581eee8a268ef715f93636485b56e559eef55ceee7a54706cf12717d035cc1f6fca838e8ce32fcbd413565ff78500c9810ff8c22ae09d3746b927b4768fc92e6d46a2dfb395cd14ae1321fd0
  8. e = 65537
  9. p = gmpy2.gcd(n1, n2)
  10. q = n1 // p  # 这里用n1求第一部分,
  11. phi = (p - 1) * (q - 1)
  12. d = gmpy2.invert(e, phi)
  13. m = gmpy2.powmod(c1, d, n1)
  14. print(binascii.unhexlify(hex(m)[2:]))
  15. #flag{c9bee33232dbbf
  16. q = n2 // p  # 这里用n2求第二部分,
  17. phi = (p - 1) * (q - 1)
  18. d = gmpy2.invert(e, phi)
  19. m = gmpy2.powmod(c2, d, n2)
  20. print(binascii.unhexlify(hex(m)[2:]))
  21. #7872763d69d769c74d}
复制代码
天干地支

题目信息:100 分 1 Polar币
  1. 小李某一天收到一条微信,微信中写了几个不同的年份
  2.           丁丑 丙子 戊辰 壬午 丁丑 丙子 戊辰 壬午 壬辰 壬辰 辛未 丙戌
  3.           微信的后面还写有“+甲子”,请解出这段密文。
  4. flag格式:flag{XXX}
复制代码

查表把附件里的年份转为数字,分别得到:14,13,5,19,14,13,5,19,29,29,8,23,提示加上甲子,就是加60
然后转ASCII码得到:JIAOJIAOYYDS,套上flag:flag{JIAOJIAOYYDS}
全世界都在说中国话

题目信息:100 分 1 Polar币
  1. 663867570008258541046114143248220132000152072143
  2. 时代在进步 中文也可以被翻译哦
  3. 得到flag用MD532位小写加密并套上flag{}
复制代码
中国电码转一下得到这都不会的话就给你一脑拍

md5加密后再套上壳:flag{679384ffaee1e8145a52408ac7ad6bfd}
小精灵来喽

题目信息:300 分 3 Polar币

压缩包有密码。。。但打开解压右边有提示哈哈,好好好

观察右边的密文eag'expxwxj,key=itsme,维吉尼亚解密得到who'stheelf
然后解压拿到里面文档

一种图形密码,结合题目名称可以想到是古精灵语


查表得到herec0mesthee1f,MD5大写得到flag{08460AE514ACCC54E5D8D4B690A75D29}
眼见非实

题目信息:300 分 3 Polar币
  1. 1111011111111011000110010101111111110010111011011110000110001101101110101110110111001100011000111100
复制代码
  1. 得出的结果用md5加密后套上flag{}
复制代码
二进制解码不行,题目名称眼见非实也就是说看到的不一定是真的,那么看到01我们可以想到培根的变型。
1 -> A,0 -> B,再培根密码解码
  1. AAAABAAAAAAAABAABBBAABBABABAAAAAAAAABBABAAABAABAAAABBBBAABBBAABAABAAABABAAABAABAAABBAABBBAABBBAAAABB
复制代码
  1. baconiancipherisgood
复制代码
MD5加密后:flag{68e5987347d955690d9782edc531ddf3}
Round

题目信息:500 分 5 Polar币
  1. BRUEIFYRGBEUNVUICRHFU
  2. FYURGUAROINNIEURYVYRU
  3. E3BYUGDUWRNYUTFSRDE5W
  4. FURYGRUTGUTUNAWGDUIEB
  5. UYGIGNGIHFYBFYURGFURB
  6. TFRUBYFUVOVNERTWINDUE
  7. HUGRURBIGGNSUITIMTQEI
  8. GBUTNGUIJTINGIEGFURYU
  9. TYVCTYSAIBYEIFWIRHUGF
  10. TRTUBGUYTRGSONIUONRRI
  11. 6YMUYTNYTIUWABRWBTESS
  12. BRUHGUFGTJNUBAFDEGTEF
  13. DHYEUBFYEYFTYUEBFIUBA
  14. CTBRTNUKMIWGRBEHSDDVC
  15. RUEBFUIRGFRBVXUAVTYEF
  16. YUGRTFBUKCZUIWEIHUEFB
  17. FRVRUIYUFRLNRUYGQEBYE
复制代码
  1. 这里有两串密码,来找找flag在哪吧
  2. (听说阿拉伯数字全世界通用哦)
  3. 和谐民主和谐富强和谐民主和谐自由和谐富强和谐民主和谐自由和谐富强和谐文明和谐富强和谐民主和谐自由和谐富强和谐爱国和谐爱国和谐民主和谐富强和谐爱国
  4. 和谐爱国和谐自由和谐文明和谐民主和谐富强和谐民主和谐富强和谐爱国和谐爱国和谐自由和谐民主和谐富强和谐爱国和谐爱国和谐文明和谐富强和谐民主和谐富强和谐爱
  5. 国和谐爱国和谐自由和谐文明和谐富强和谐爱国和谐爱国和谐自由和谐文明和谐民主和谐富强和谐爱国和谐爱国和谐自由和谐文明和谐民主和谐富强和谐爱国和谐爱国和谐
  6. 自由和谐文明和谐民主和谐富强和谐爱国和谐爱国和谐自由和谐文明和谐民主和谐富强和谐爱国和谐爱国和谐自由和谐文明和谐民主
  7. lqbehgfdajmopcikn
  8. 将找到的字符串进行md5加密后套上flag{}即可
复制代码
社会主义核心价值观解码
1014014020140881088421010884108820108842088421088421088421088421088421
发现只有01248,云影密码解码
  1. AEEBEQWAURAVWWWWW
复制代码
再看第一个文件
托马斯杰斐逊 转轮密码
原理:给一个密码表,n行的26个字母,key是 1 - n 的数列, 密文是 n 个英文字母,根据 key 找对应行的密码表,然后在密码表上找密文字母,以这个字母为开头,重新排序。
先把lqbehgfdajmopcikn转成数字得到:12,17,2,5,8,7,6,4,1,10,13,15,16,3,9,11,14,密文是AEEBEQWAURAVWWWWW
比如第一个key是11,就要把第11行变为以A开头的串
6YMUYTNYTIUWABRWBTESS –> ABRWBTESS6YMUYTNYTIUW
以此类推
exp:
  1. import re
  2. text=""
  3. code = [
  4. "BRUEIFYRGBEUNVUICRHFU",
  5. "FYURGUAROINNIEURYVYRU",
  6. "E3BYUGDUWRNYUTFSRDE5W",
  7. "FURYGRUTGUTUNAWGDUIEB",
  8. "UYGIGNGIHFYBFYURGFURB",
  9. "TFRUBYFUVOVNERTWINDUE",
  10. "HUGRURBIGGNSUITIMTQEI",
  11. "GBUTNGUIJTINGIEGFURYU",
  12. "TYVCTYSAIBYEIFWIRHUGF",
  13. "TRTUBGUYTRGSONIUONRRI",
  14. "6YMUYTNYTIUWABRWBTESS",
  15. "BRUHGUFGTJNUBAFDEGTEF",
  16. "DHYEUBFYEYFTYUEBFIUBA",
  17. "CTBRTNUKMIWGRBEHSDDVC",
  18. "RUEBFUIRGFRBVXUAVTYEF",
  19. "YUGRTFBUKCZUIWEIHUEFB",
  20. "FRVRUIYUFRLNRUYGQEBYE"
  21. ]
  22. print(code)
  23. codetext="AEEBEQWAURAVWWWWW"
  24. codenum = "12,17,2,5,8,7,6,4,1,10,13,15,16,3,9,11,14"
  25. codenum=codenum.split(",")#把这些数字都弄到一个里面去
  26. #print(codenum)
  27. a=0
  28. print("解密后的:")
  29. for i in codenum:
  30.     index=code[int(i)-1].index(codetext[a])
  31.     a=a+1
  32.     code[int(i)-1]=code[int(i)-1][index:]+code[int(i)-1][:index]
  33.     print(code[int(i)-1])
  34. #完成了变形了
  35. print("下面是每一列的")
  36. for i in range(len(code[0])):
  37.       str=""
  38.       print("第{}列的是:".format(i),end="")
  39.       for j in codenum:
  40.           str+=code[int(j)-1][i]
  41.       print(str.lower())
复制代码
flagisvucuuub3ayr
注意将flag转化为大写后再MD5加密,MD5加密后:flag{52c85c0bb38a8fc993d335401b56d9b6}
low encryption exponent RSA

题目信息:500 分 5 Polar币
【2023秋季个人挑战赛】 小王在学习了RSA加密后知道了,当n非常大时,将n拆分成两个素数相乘就变得十分困难,从而能够保证加密的安全性, 于是小王自以为是的使用了函数自动生成了很大的n,以为这样就很安全了,但他似乎没有考虑e对c的影响。
  1. # -*- coding = utf-8 -*-
  2. # @software:PyCharm
  3. from Crypto.Util.number import *
  4. import libnum
  5. flag = b'***********************'
  6. m = bytes_to_long(flag)
  7. n = getRandomNBitInteger(2048)
  8. e = 5
  9. c = pow(m, e, n)
  10. print(n)
  11. print(c)
  12. #n=18049146130359556157811138499355569967231668855528566823643376144155931993553424757354835027829037263429007310779886281743425186527415596058004878860570474866413182148724803537036078612785180550377667299555519230603647447077725080756322343538156406080031959768393145744701092093127752647143419553963316375696232038952573236311522683541862835602321038621904842874356522524316864553501304106884213097353522958546518042728628006318129608745487662533959888992223736595503203451378533217004433230837006796341055201266431153548000348148960250455415972226546646460918890401484239320725539304914347952245606818833495867312063
  13. #c=377041108412334062897923100149371833160065752130578483588828849399791858197434981428466047315212724764223394695011882740933537996983126187094472520344493047769519118482187945467176598341785927269390299847888131061799861412055502165865052720513992259109503509827127768615772091500352075827289290029872935215672798059068944088543667111296361405639896493856695176145088430237388172420390881291650155157688737470414069130558367036786376549227175617218017578125
复制代码
哈哈哈,小明文
exp:
  1. from Crypto.Util.number import long_to_bytes
  2. from gmpy2 import iroot
  3. c1 = 377041108412334062897923100149371833160065752130578483588828849399791858197434981428466047315212724764223394695011882740933537996983126187094472520344493047769519118482187945467176598341785927269390299847888131061799861412055502165865052720513992259109503509827127768615772091500352075827289290029872935215672798059068944088543667111296361405639896493856695176145088430237388172420390881291650155157688737470414069130558367036786376549227175617218017578125
  4. m = iroot(c1,5)[0]
  5. print(long_to_bytes(m).decode())
  6. #flag{fea80b814dcb0ff0a17e36c1e72569e7}
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

锦通

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