以下题目来源:nssctf
❕📓 ‧₊˚ 🦢
01 [鹤城杯 2021]easy_crypto 🚩flag:NSSCTF{IlUqU9O5guX6YiITsRNPiQmbhNRjGuTP}
💡hint:古典密码 其他 词频分析
核心价值观解码。
while 1 : str1 = input ('输入要解码的文本:' ) list1 = ['富强' , '民主' , '文明' , '和谐' , '自由' , '平等' , '公正' , '法治' , '爱国' , '敬业' , '诚信' , '友善' ] list1 = [list1.index(str1[f1 << 1 ] + str1[f1 << 1 | 1 ]) for f1 in range (int (len (str1)/2 ))] a = 0 list2 = [] while a < len (list1): if list1[a] < 10 : list2.append(str (list1[a])) elif list1[a] == 10 : a += 1 list2.append(hex (list1[a]+10 )[2 :]) else : a += 1 list2.append(hex (list1[a]+6 )[2 :]) a += 1 str1 = bytes .fromhex('' .join(list2)).decode('utf-8' ) print ('解码结果:' , str1, '\n' *3 )
02 [强网拟态 2021]拟态签到题 🚩flag:NSSCTF{GaqY7KtEtrVIX1Q5oP5iEBRCYXEAy8rT}
💡hint:Base家族 古典密码 其他
Base64 cyberchef自动转化
03 [SWPUCTF 2021 新生赛]crypto8 🚩flag:NSSCTF{cheese_is_power}
💡hint:古典密码 其他 uuencode
拿到题目之后是:
73E-30U1&>V-H965S95]I<U]P;W=E<GT`
根据题目标签推测是uuencode。
使用网站解码:
http://www.hiencode.com/uu.html
NSSCTF{cheese_is_power}
04 [SWPUCTF 2021 新生赛]crypto7 🚩flag:NSSCTF{md5yyds}
💡hint: md5爆破
题目信息:
69f7906323b4f7d1e4e972acf4abfbfc,得到的结果用NSSCTF{}包裹。
一眼md5
使用网站进行解密:https://www.somd5.com
得到结果:
md5yyds
05 [SWPUCTF 2021 新生赛]crypto6 🚩flag:NSSCTF{5e110989-dc43-1bd3-00b4-9009206158fe}
💡hint:Base家族 古典密码
题目信息:
var="************************************" flag='NSSCTF{' + base64.b16encode(base64.b32encode(base64.b64encode(var.encode()))) + '}' print (flag)小明不小心泄露了源码,输出结果为:4A5A4C564B36434E4B5241544B5432454E4E32465552324E47424758534D44594C4657564336534D4B5241584F574C4B4B463245365643424F35485649534C584A5A56454B4D4B5049354E47593D3D3D,你能还原出var的正确结果吗?
梳理加密过程,是先进行base64编码,编码后的字符串再进行base32编码,然后是base16编码。
那么根据过程返回去,是先16,再32,再64,写脚本解题即可。
解密脚本:
import base64encoded = "4A5A4C564B36434E4B5241544B5432454E4E32465552324E47424758534D44594C4657564336534D4B5241584F574C4B4B463245365643424F35485649534C584A5A56454B4D4B5049354E47593D3D3D" b16_decoded = base64.b16decode(encoded, casefold=True ) print ("After b16 decode:" , b16_decoded)b32_decoded = base64.b32decode(b16_decoded) print ("After b32 decode:" , b32_decoded)b64_decoded = base64.b64decode(b32_decoded) print ("After b64 decode:" , b64_decoded)var = b64_decoded.decode('utf-8' ) print ("Original var:" , var)
最终flag:
NSSCTF{5e110989-dc43-1bd3-00b4-9009206158fe}
06 [SWPUCTF 2021 新生赛]ez_caesar 🚩flag:NSSCTF{youhaveknowcaesar}
💡hint:Base家族 古典密码 凯撒密码
题目信息:
import base64def caesar (plaintext ): str_list = list (plaintext) i = 0 while i < len (plaintext): if not str_list[i].isalpha(): str_list[i] = str_list[i] else : a = "A" if str_list[i].isupper() else "a" str_list[i] = chr ((ord (str_list[i]) - ord (a) + 5 ) % 26 + ord (a) or 5 ) i = i + 1 return '' .join(str_list) flag = "*************************" str = caesar(flag)print (str )
flag经过题目中凯撒加密得到str,编写脚本进行逆过程即可。
尝试过先凯撒解密再base64不行,原来是先base64再凯撒解密。
解题脚本如下:
import base64def caesar (plaintext ): str_list = list (plaintext) i = 0 while i < len (plaintext): if not str_list[i].isalpha(): str_list[i] = str_list[i] else : a = "A" if str_list[i].isupper() else "a" str_list[i] = chr ((ord (str_list[i]) - ord (a) + 21 ) % 26 + ord (a) or 21 ) i = i + 1 return '' .join(str_list) str ="U1hYSFlLe2R0em1mYWpwc3RiaGZqeGZ3fQ==" str =base64.b64decode(str ).decode('utf-8' )flag=caesar(str ) print (flag)
NSSCTF{youhaveknowcaesar}
07 [SWPUCTF 2021 新生赛]ez_caesar 🚩flag:NSSCTF{whenthepigwanttoeat}
💡hint:凯撒密码 ROT 古典密码
题目信息:
AFFPGS{pbatenghyngvbaf!!!},建议直接秒了
凯撒密码爆破:
def caesar_brute_force (ciphertext ): for shift in range (1 , 26 ): decrypted = "" for char in ciphertext: if char.isalpha(): if char.isupper(): decrypted_char = chr (((ord (char) - ord ('A' ) - shift) % 26 ) + ord ('A' )) else : decrypted_char = chr (((ord (char) - ord ('a' ) - shift) % 26 ) + ord ('a' )) decrypted += decrypted_char else : decrypted += char print (f"Shift {shift} : {decrypted} " ) ciphertext = "AFFPGS{pbatenghyngvbaf!!!}" caesar_brute_force(ciphertext)
得到:
NSSCTF{congratulations!!!}
08 [SWPUCTF 2021 新生赛]pigpig 🚩flag:NSSCTF{congratulations!!!}
💡hint:古典密码 其他 猪圈密码
之前练习misc见过的,猪圈密码。
解密网站:http://www.hiencode.com/pigpen.html

NSSCTF{whenthepigwanttoeat}
09 [SWPUCTF 2021 新生赛]ez_rsa 🚩flag:NSSCTF{08bb8fb628da85923e5734a75ac19ffe}
💡hint:RSA
p = 1325465431 q = 152317153 e = 65537 计算出d,将d用MD5加密后包裹NSSCTF{}提交
解题脚本:
import mathimport hashlibp = 1325465431 q = 152317153 e = 65537 n = p * q phi_n = (p - 1 ) * (q - 1 ) def extended_gcd (a, b ): if b == 0 : return a, 1 , 0 else : g, x, y = extended_gcd(b, a % b) return g, y, x - (a // b) * y g, x, y = extended_gcd(e, phi_n) if g != 1 : raise ValueError("e 和 φ(n) 不互质,无法计算 d" ) else : d = x % phi_n d_str = str (d) md5_hash = hashlib.md5(d_str.encode()).hexdigest() flag = f"NSSCTF{{{md5_hash} }}" print ("计算得到的 d:" , d)print ("MD5 哈希:" , md5_hash)print ("Flag:" , flag)
运行结果:
计算得到的 d: 43476042047970113 MD5 哈希: 08bb8fb628da85923e5734a75ac19ffe Flag: NSSCTF{08bb8fb628da85923e5734a75ac19ffe}
10 [LitCTF 2023]梦想是红色的 (初级) 🚩flag:NSSCTF{为之则易,不为则难}
💡hint:RSA
题目描述: 曾经我有个梦想。
自由友善公正公正敬业法治自由自由和谐平等自由自由公正法治诚信民主诚信自由自由诚信民主爱国友善平等诚信富强友善爱国自由诚信民主敬业爱国诚信民主友善爱国平等爱国爱国敬业敬业友善爱国公正敬业爱国敬业和谐文明诚信文明友善爱国自由诚信民主爱国爱国诚信和谐友善爱国自由友善平等爱国友善平等友善自由诚信自由平等爱国爱国敬业敬业友善爱国敬业敬业友善自由友善平等诚信自由法治诚信和谐
核心价值观解密,很红。
使用脚本:
while 1 : str1 = input ('输入要解码的文本:' ) list1 = ['富强' , '民主' , '文明' , '和谐' , '自由' , '平等' , '公正' , '法治' , '爱国' , '敬业' , '诚信' , '友善' ] list1 = [list1.index(str1[f1 << 1 ] + str1[f1 << 1 | 1 ]) for f1 in range (int (len (str1)/2 ))] a = 0 list2 = [] while a < len (list1): if list1[a] < 10 : list2.append(str (list1[a])) elif list1[a] == 10 : a += 1 list2.append(hex (list1[a]+10 )[2 :]) else : a += 1 list2.append(hex (list1[a]+6 )[2 :]) a += 1 str1 = bytes .fromhex('' .join(list2)).decode('utf-8' ) print ('解码结果:' , str1, '\n' *3 )
运行结果:
LitCTF{为之则易,不为则难}
记得改成NSSCTF{}
11 [鹤城杯 2021]A_CRYPTO 🚩flag:NSSCTF{W0w_y0u_c4n_rea11y_enc0d1ng!}
💡hint:ROT base
4O595954494Q32515046324757595N534R52415653334357474R4N575955544R4O5N4Q46434S4O59474253464Q5N444R4Q51334557524O5N4S424944473542554O595N44534O324R49565746515532464O49345649564O464R4R494543504N35
import base64def caesar13_decode (text ): """凯撒13解密(ROT13)""" result = [] for char in text: if 'A' <= char <= 'Z' : result.append(chr ((ord (char) - ord ('A' ) + 13 ) % 26 + ord ('A' ))) elif '0' <= char <= '9' : result.append(char) else : result.append(char) return '' .join(result) def decode_layers (ciphertext ): """多层解码:ROT13 → Base16 → Base32 → Base64 → Base85""" step1 = caesar13_decode(ciphertext) print (f"After ROT13: {step1} " ) try : step2 = base64.b16decode(step1.encode()).decode() print (f"After Base16: {step2} " ) except : step2 = step1 print ("Base16 decode failed, skipping..." ) try : step3 = base64.b32decode(step2.encode()).decode() print (f"After Base32: {step3} " ) except : step3 = step2 print ("Base32 decode failed, skipping..." ) try : step4 = base64.b64decode(step3.encode()).decode() print (f"After Base64: {step4} " ) except : step4 = step3 print ("Base64 decode failed, skipping..." ) try : step5 = base64.b85decode(step4.encode()).decode() print (f"After Base85: {step5} " ) except : step5 = step4 print ("Base85 decode failed, skipping..." ) return step5 ciphertext = "4O595954494Q32515046324757595N534R52415653334357474R4N575955544R4O5N4Q46434S4O59474253464Q5N444R4Q51334557524O5N4S424944473542554O595N44534O324R49565746515532464O49345649564O464R4R494543504N35" final_result = decode_layers(ciphertext) print ("\nFinal Result:" , final_result)
flag{W0w_y0u_c4n_rea11y_enc0d1ng!}
12 [LitCTF 2023]Hex?Hex!(初级) 🚩flag:NSSCTF{tai111coollaaa!}
💡hint:hex
hex_string = "4c69744354467b746169313131636f6f6c6c616161217d" decoded_str = bytes .fromhex(hex_string).decode('utf-8' ) print ("方法1结果:" , decoded_str)import codecsdecoded_str = codecs.decode(hex_string, 'hex' ).decode('utf-8' ) print ("方法2结果:" , decoded_str)def hex_to_str (hex_str ): return '' .join([chr (int (hex_str[i:i+2 ], 16 )) for i in range (0 , len (hex_str), 2 )]) print ("方法3结果:" , hex_to_str(hex_string))
13 [BJDCTF 2020]base?? 🚩flag:NSSCTF{D0_Y0u_kNoW_Th1s_b4se_map}
💡hint:base
dict:{0 : chipertext: FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw
解题脚本:
mapping = { 0 : 'J' , 1 : 'K' , 2 : 'L' , 3 : 'M' , 4 : 'N' , 5 : 'O' , 6 : 'x' , 7 : 'y' , 8 : 'U' , 9 : 'V' , 10 : 'z' , 11 : 'A' , 12 : 'B' , 13 : 'C' , 14 : 'D' , 15 : 'E' , 16 : 'F' , 17 : 'G' , 18 : 'H' , 19 : '7' , 20 : '8' , 21 : '9' , 22 : 'P' , 23 : 'Q' , 24 : 'I' , 25 : 'a' , 26 : 'b' , 27 : 'c' , 28 : 'd' , 29 : 'e' , 30 : 'f' , 31 : 'g' , 32 : 'h' , 33 : 'i' , 34 : 'j' , 35 : 'k' , 36 : 'l' , 37 : 'm' , 38 : 'W' , 39 : 'X' , 40 : 'Y' , 41 : 'Z' , 42 : '0' , 43 : '1' , 44 : '2' , 45 : '3' , 46 : '4' , 47 : '5' , 48 : '6' , 49 : 'R' , 50 : 'S' , 51 : 'T' , 52 : 'n' , 53 : 'o' , 54 : 'p' , 55 : 'q' , 56 : 'r' , 57 : 's' , 58 : 't' , 59 : 'u' , 60 : 'v' , 61 : 'w' , 62 : '+' , 63 : '/' , 64 : '=' } ciphertext = "FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw" reverse_mapping = {v: k for k, v in mapping.items()} numbers = [] for char in ciphertext: if char in reverse_mapping: numbers.append(reverse_mapping[char]) else : print (f"警告:字符 '{char} ' 不在映射字典中!" ) numbers.append(0 ) print ("转换后的数字序列:" , numbers)base64_indices = [num % 64 for num in numbers] print ("Base64索引序列:" , base64_indices)base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" base64_str = '' .join([base64_chars[idx] for idx in base64_indices]) print ("Base64字符串:" , base64_str)import base64decoded_bytes = base64.b64decode(base64_str) decoded_text = decoded_bytes.decode('utf-8' ) print ("最终解密结果:" , decoded_text)
BJD{D0_Y0u_kNoW_Th1s_b4se_map}
14 [SWPUCTF 2021 新生赛]traditional 🚩flag:NSSCTF{Da01sall}
💡hint:其他
题目: 西方的二进制数学的发明者莱布尼茨,从中国的八卦图当中受到启发,演绎并推论出了数学矩 阵, 最后创造的二进制数学。二进制数学的诞生为计算机的发明奠定了理论基础。而计算机现在改 变 了我们整个世界,改变了我们生活,而他的源头却是来自于八卦图。现在,给你一组由八卦图 方位 组成的密文,你能破解出其中的含义吗? 震坤艮 震艮震 坤巽坤 坤巽震 震巽兑 震艮震 震离艮 震离艮 格式:NSSCTF{}
_hash = {"乾" :"111" , "兑" :"011" , "离" :"101" , "震" :"001" , "巽" :"110" , "坎" :"010" , "艮" :"100" , "坤" :"000" } text = "震坤艮 震艮震 坤巽坤 坤巽震 震巽兑 震艮震 震离艮 震离艮" flag = "" for i in text: try : flag += '' .join(_hash [i]) except KeyError: flag += '' .join(" " ) print ("flag = " , flag)_flag = '' for j in range (0 , len (flag) , 10 ): _flag += '' .join((chr ((int (flag[j:j + 10 ] , 2 ))))) print ("NSSCTF{" + _flag + "}" )
NSSCTF{Da01sall}
15 [SWPUCTF 2021 新生赛]crypto2 🚩flag:NSSCTF{xxxxx******xxxxx}
💡hint:RSA 共模攻击
from gmpy2 import *from Crypto.Util.number import *flag = '***************' p = getPrime(512 ) q = getPrime(512 ) m1 = bytes_to_long(bytes (flag.encode())) n = p*q e1 = getPrime(32 ) e2 = getPrime(32 ) print ()flag1 = pow (m1,e1,n) flag2 = pow (m1,e2,n) print ('flag1= ' +str (flag1))print ('flag2= ' +str (flag2))print ('e1= ' +str (e1))print ('e2= ' +str (e2))print ('n= ' +str (n))
RSA 共模攻击
解题脚本:
from gmpy2 import gcdext, invert, powmodfrom Crypto.Util.number import long_to_bytesflag1 = 100156221476910922393504870369139942732039899485715044553913743347065883159136513788649486841774544271396690778274591792200052614669235485675534653358596366535073802301361391007325520975043321423979924560272762579823233787671688669418622502663507796640233829689484044539829008058686075845762979657345727814280 flag2 = 86203582128388484129915298832227259690596162850520078142152482846864345432564143608324463705492416009896246993950991615005717737886323630334871790740288140033046061512799892371429864110237909925611745163785768204802056985016447086450491884472899152778839120484475953828199840871689380584162839244393022471075 e1 = 3247473589 e2 = 3698409173 n = 103606706829811720151309965777670519601112877713318435398103278099344725459597221064867089950867125892545997503531556048610968847926307322033117328614701432100084574953706259773711412853364463950703468142791390129671097834871371125741564434710151190962389213898270025272913761067078391308880995594218009110313 g, s, t = gcdext(e1, e2) assert g == 1 if s < 0 : s = -s flag1 = invert(flag1, n) if t < 0 : t = -t flag2 = invert(flag2, n) m = powmod(flag1, s, n) * powmod(flag2, t, n) % n flag = long_to_bytes(m) print ("解密结果:" , flag)
NSSCTF{xxxxx******xxxxx}
16 [羊城杯 2021]Bigrsa 🚩flag:NSSCTF{xxxxx******xxxxx}
💡hint:共享素数 RSA 不互素
题目描述:
from Crypto.Util.number import *from flag import *n1 = 103835296409081751860770535514746586815395898427260334325680313648369132661057840680823295512236948953370895568419721331170834557812541468309298819497267746892814583806423027167382825479157951365823085639078738847647634406841331307035593810712914545347201619004253602692127370265833092082543067153606828049061 n2 = 115383198584677147487556014336448310721853841168758012445634182814180314480501828927160071015197089456042472185850893847370481817325868824076245290735749717384769661698895000176441497242371873981353689607711146852891551491168528799814311992471449640014501858763495472267168224015665906627382490565507927272073 e = 65537 m = bytes_to_long(flag) c = pow (m, e, n1) c = pow (c, e, n2) print ("c = %d" % c)
解题脚本:
from Crypto.Util.number import *import gmpy2n1 = 103835296409081751860770535514746586815395898427260334325680313648369132661057840680823295512236948953370895568419721331170834557812541468309298819497267746892814583806423027167382825479157951365823085639078738847647634406841331307035593810712914545347201619004253602692127370265833092082543067153606828049061 n2 = 115383198584677147487556014336448310721853841168758012445634182814180314480501828927160071015197089456042472185850893847370481817325868824076245290735749717384769661698895000176441497242371873981353689607711146852891551491168528799814311992471449640014501858763495472267168224015665906627382490565507927272073 e = 65537 c = 60406168302768860804211220055708551816238816061772464557956985699400782163597251861675967909246187833328847989530950308053492202064477410641014045601986036822451416365957817685047102703301347664879870026582087365822433436251615243854347490600004857861059245403674349457345319269266645006969222744554974358264 p = gmpy2.gcd(n1,n2) q1 = n1 // p q2 = n2 // p phi1 = (p-1 )*(q1-1 ) phi2 = (p-1 )*(q2-1 ) d1 = gmpy2.invert(e,phi1) d2 = gmpy2.invert(e,phi2) c1 = pow (c,d2,n2) m = pow (c1,d1,n1) print (long_to_bytes(m))
b’SangFor{qSccmm1WrgvIg2Uq_cZhmqNfEGTz2GV8}’
17 [LitCTF 2023]家人们!谁懂啊,RSA签到都不会 (初级) 🚩flag:NSSCTF{it_is_easy_to_solve_question_when_you_know_p_and_q}
💡hint: RSA 不互素
from Crypto.Util.number import *from secret import flagm = bytes_to_long(flag) p = getPrime(512 ) q = getPrime(512 ) e = 65537 n = p*q c = pow (m,e,n) print (f'p = {p} ' )print (f'q = {q} ' )print (f'c = {c} ' )''' p = 12567387145159119014524309071236701639759988903138784984758783651292440613056150667165602473478042486784826835732833001151645545259394365039352263846276073 q = 12716692565364681652614824033831497167911028027478195947187437474380470205859949692107216740030921664273595734808349540612759651241456765149114895216695451 c = 108691165922055382844520116328228845767222921196922506468663428855093343772017986225285637996980678749662049989519029385165514816621011058462841314243727826941569954125384522233795629521155389745713798246071907492365062512521474965012924607857440577856404307124237116387085337087671914959900909379028727767057 '''
题目分析
给定:
明文 m 经过 RSA 加密:c = pow(m, e, n)
已知 p, q, e, c,需要恢复 m
数学原理
计算 n = p * q
计算欧拉函数 φ(n) = (p-1) * (q-1)
计算私钥 d = inverse(e, φ(n))
解密明文 m = pow(c, d, n)
解题脚本:
from Crypto.Util.number import long_to_bytesp = 12567387145159119014524309071236701639759988903138784984758783651292440613056150667165602473478042486784826835732833001151645545259394365039352263846276073 q = 12716692565364681652614824033831497167911028027478195947187437474380470205859949692107216740030921664273595734808349540612759651241456765149114895216695451 e = 65537 c = 108691165922055382844520116328228845767222921196922506468663428855093343772017986225285637996980678749662049989519029385165514816621011058462841314243727826941569954125384522233795629521155389745713798246071907492365062512521474965012924607857440577856404307124237116387085337087671914959900909379028727767057 n = p * q phi = (p - 1 ) * (q - 1 ) d = pow (e, -1 , phi) m = pow (c, d, n) flag = long_to_bytes(m) print ("解密结果:" , flag)
解密结果: b’LitCTF{it_is_easy_to_solve_question_when_you_know_p_and_q}’
18 [LitCTF 2023]你是我的关键词(Keyworld) (初级) 🚩flag:NSSCTF{Y0U_AR3_MY_KEYW0RD}
💡hint: 其他
关键字密码在线解密网站:
http://www.hiencode.com/keyword.html
注意这里解密密码是you
LITCTF{Y0U_AR3_MY_KEYW0RD}
19 [LitCTF 2023]Is this only base? 🚩flag:NSSCTF{LeT_Us_H4V3_fU0!!!!!}
💡hint: 栅栏密码 凯撒密码 Base家族
题目描述:
SWZxWl=F=DQef0hlEiSUIVh9ESCcMFS9NF2NXFzM 今年是本世纪的第23年呢
import base64rail_fence_decrypted = "SWZxWlFDe0liUV9ScF9FNFMzX2NSMCEhISEhfQ==" base64_decoded = base64.b64decode(rail_fence_decrypted).decode('utf-8' ) print ("Base64解码结果:" , base64_decoded) def caesar_decrypt (ciphertext, shift ): result = "" for char in ciphertext: if char.isalpha(): ascii_offset = ord ('A' ) if char.isupper() else ord ('a' ) decrypted_char = chr ((ord (char) - ascii_offset - shift) % 26 + ascii_offset) result += decrypted_char else : result += char return result for shift in range (26 ): decrypted = caesar_decrypt(base64_decoded, shift) if "CTF" in decrypted: print (f"偏移量 {shift} : {decrypted} " )
LitCTF{LeT_Us_H4V3_fU0!!!!!}
20 [SWPU 2020]happy 🚩flag:NSSCTF{happy_rsa_1}
💡hint:RSA 素数分解 共享素数
( ( #q + q*p^3 =1285367317452089980789441829580397855321901891350429414413655782431779727560841427444135440068248152908241981758331600586 #qp + q *p^2 = 1109691832903289208389283296592510864729403914873734836011311325874120780079555500202475594
解题脚本:
import mathfrom Crypto.Util.number import inverse, long_to_bytesfrom paramiko.util import mod_inverseA = 1285367317452089980789441829580397855321901891350429414413655782431779727560841427444135440068248152908241981758331600586 B = 1109691832903289208389283296592510864729403914873734836011311325874120780079555500202475594 c = 0x7a7e031f14f6b6c3292d11a41161d2491ce8bcdc67ef1baa9e e = 0x872a335 C = math.gcd(A,B) p = B // C q = C // (1 + p) n = p * q phi = (p - 1 ) * (q - 1 ) d = mod_inverse(e,phi) m = pow (c,d,n) print (long_to_bytes(m))
21 [安洵杯 2019]JustBase 🚩flag:NSSCTF{22-QWERTYUIO-PLKJHGFDS-AZXCVBNM}
💡hint:base
VGhlIGdlb@xvZ#kgb@YgdGhlIEVhcnRoJ#Mgc#VyZmFjZSBpcyBkb@!pbmF)ZWQgYnkgdGhlIHBhcnRpY#VsYXIgcHJvcGVydGllcyBvZiB#YXRlci$gUHJlc@VudCBvbiBFYXJ)aCBpbiBzb@xpZCwgbGlxdWlkLCBhbmQgZ@FzZW(!cyBzdGF)ZXMsIHdhdGVyIGlzIGV$Y@VwdGlvbmFsbHkgcmVhY#RpdmUuIEl)IGRpc#NvbHZlcywgdHJhbnNwb#J)cywgYW%kIHByZWNpcGl)YXRlcyBtYW%%IGNoZW!pY@FsIGNvbXBvdW%kcyBhbmQgaXMgY@(uc#RhbnRseSBtb@RpZnlpbmcgdGhlIGZhY@Ugb@YgdGhlIEVhcnRoLiBFdmFwb#JhdGVkIGZyb@)gdGhlIG(jZWFucywgd@F)ZXIgdmFwb#IgZm(ybXMgY@xvdWRzLCBzb@!lIG(mIHdoaWNoIGFyZSB)cmFuc#BvcnRlZCBieSB#aW%kIG(@ZXIgdGhlIGNvbnRpbmVudHMuIENvbmRlbnNhdGlvbiBmcm(tIHRoZSBjbG(!ZHMgcHJvdmlkZXMgdGhlIGVzc@VudGlhbCBhZ@VudCBvZiBjb@%)aW%lbnRhbCBlcm(zaW(uOiByYWluLlRoZSByYXRlIGF)IHdoaWNoIGEgbW(sZWN!bGUgb@Ygd@F)ZXIgcGFzc@VzIHRob#VnaCB)aGUgY#ljbGUgaXMgbm()IHJhbmRvbQpBbmQgdGhlIGZsYWcgaXM^IENURnsyMi!RV)VSVFlVSU*tUExLSkhHRkRTLUFaWENWQk%NfQ==
解题脚本:
import base64my_file = './justaBase/base.txt' try : with open (my_file, 'r' ) as file: my_str = file.read() print ('文件读取成功,内容为' , my_str) except FileNotFoundError: print (f"文件 '{my_file} ' 未找到" ) except Exception as e: print (f"读取文件时出错:{e} " ) my_dict = {'!' : '1' , '@' : '2' , '#' : '3' , '$' : '4' , '%' : '5' , '^' : '6' , '&' : '7' , '*' : '8' , '(' : '9' , ')' : '0' } flag_str = '' for i in my_str: if i in my_dict: flag_str += my_dict[i] else : flag_str += i print ("特殊符号替换后字符串为%s" % flag_str)print ("base64解码后字符串为%s" % base64.b64decode(flag_str).decode())
22 [AFCTF 2018]BASE 🚩flag:NSSCTF{U_5h0u1d_Us3_T00l5}
💡hint:hex base
解题脚本:
自动解码多层嵌套的 Base16/Base32/Base64 编码
import base64file = open ("flag_encode.txt" , "r" ) text = file.read() while (1 ): try : text = base64.b16decode(text).decode() except : try : text = base64.b32decode(text).decode() except : try : text = base64.b64decode(text).decode() except : print (text) break ;
23 [NSSCTF 2022 Spring Recruit]classic 🚩flag:NSSCTF{no_why}
💡hint:base 古典 凯撒
UZZJAM{UIXETGR7TMWD42SKTCWEP4AG_mhrlmshnayfihzl}
解题脚本:
import redef caesar_decrypt (ciphertext ): """自动凯撒解密并筛选有效结果""" possible_flags = [] for shift in range (26 ): decrypted = "" for char in ciphertext: if char.isupper(): decrypted += chr ((ord (char) - ord ('A' ) - shift) % 26 + ord ('A' )) elif char.islower(): decrypted += chr ((ord (char) - ord ('a' ) - shift) % 26 + ord ('a' )) else : decrypted += char if re.search(r'[A-Za-z]+\{.*\}' , decrypted): possible_flags.append((shift, decrypted)) return possible_flags ciphertext = "UZZJAM{UIXETGR7TMWD42SKTCWEP4AG_mhrlmshnayfihzl}" results = caesar_decrypt(ciphertext) if not results: print ("未找到有效解密结果!" ) else : print ("可能的 Flag(按优先级排序):" ) for shift, flag in sorted (results, key=lambda x: -len (x[1 ])): print (f"偏移量 {shift} : {flag} " ) best_guess = max (results, key=lambda x: len (re.findall(r'[A-Za-z0-9_]' , x[1 ]))) print (f"\n推荐结果(偏移量 {best_guess[0 ]} ): {best_guess[1 ]} " )
NSSCTF{NBQXMZK7MFPW42LDMVPXI4TZ_fakeflagtrybase}
然后使用base自动解码脚本:
import base64text = "NBQXMZK7MFPW42LDMVPXI4TZ" while (1 ): try : text = base64.b16decode(text).decode() except : try : text = base64.b32decode(text).decode() except : try : text = base64.b64decode(text).decode() except : print (text) break
得到:
have_a_nice_try
24 [SWPUCTF 2021 新生赛]crypto4 🚩flag:NSSCTF{have_a_nice_try}
💡hint:RSA
from gmpy2 import *from Crypto.Util.number import *flag = '**********' p = getPrime(512 ) q = next_prime(p) m1 = bytes_to_long(bytes (flag.encode())) e = 0x10001 n = p*q flag1 = pow (m1,e,n) print ('flag= ' +str (flag1))print ('n= ' +str (n))flag= 10227915341268619536932290456122384969242151167487654201363877568935534996454863939953106193665663567559506242151019201314446286458150141991211233219320700112533775367958964780047682920839507351492644735811096995884754664899221842470772096509258104067131614630939533042322095150722344048082688772981180270243 n= 52147017298260357180329101776864095134806848020663558064141648200366079331962132411967917697877875277103045755972006084078559453777291403087575061382674872573336431876500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153
解题脚本:
from gmpy2 import isqrt, next_prime, mpzfrom Crypto.Util.number import long_to_bytesflag1 = 10227915341268619536932290456122384969242151167487654201363877568935534996454863939953106193665663567559506242151019201314446286458150141991211233219320700112533775367958964780047682920839507351492644735811096995884754664899221842470772096509258104067131614630939533042322095150722344048082688772981180270243 n = 52147017298260357180329101776864095134806848020663558064141648200366079331962132411967917697877875277103045755972006084078559453777291403087575061382674872573336431876500128247133861957730154418461680506403680189755399752882558438393107151815794295272358955300914752523377417192504702798450787430403387076153 e = 0x10001 def factor_n (n ): sqrt_n = isqrt(n) p = sqrt_n while True : if n % p == 0 : return p, n // p p -= 1 p, q = factor_n(mpz(n)) print ("分解结果:" )print ("p =" , p)print ("q =" , q)phi = (p - 1 ) * (q - 1 ) d = pow (e, -1 , phi) m1 = pow (flag1, d, n) flag = long_to_bytes(m1) print ("\n解密结果:" , flag)
分解结果: p = 7221289171488727827673517139597844534869368289455419695964957239047692699919030405800116133805855968123601433247022090070114331842771417566928809956044421 q = 7221289171488727827673517139597844534869368289455419695964957239047692699919030405800116133805855968123601433247022090070114331842771417566928809956045093
解密结果: b’NSSCTF{no_why}’
25 [AFCTF 2018]你能看出这是什么加密么 🚩flag:NSSCTF{R54_|5_$0_$imp13}
💡hint:RSA
p=0 x928fb6aa9d813b6c3270131818a7c54edb18e3806942b88670106c1821e0326364194a8c49392849432b37632f0abe3f3c52e909b939c91c50e41a7b8cd00c67d6743b4f q=0 xec301417ccdffa679a8dcc4027dd0d75baf9d441625ed8930472165717f4732884c33f25d4ee6a6c9ae6c44aedad039b0b72cf42cab7f80d32b74061 e=0 x10001 c=0 x70c9133e1647e95c3cb99bd998a9028b5bf492929725a9e8e6d2e277fa0f37205580b196e5f121a2e83bc80a8204c99f5036a07c8cf6f96c420369b4161d2654a7eccbdaf583204b645e137b3bd15c5ce865298416fd5831cba0d947113ed5be5426b708b89451934d11f9aed9085b48b729449e461ff0863552149b965e22b6
解题脚本:
import gmpy2from Crypto.Util.number import *p = 0x928fb6aa9d813b6c3270131818a7c54edb18e3806942b88670106c1821e0326364194a8c49392849432b37632f0abe3f3c52e909b939c91c50e41a7b8cd00c67d6743b4f q = 0xec301417ccdffa679a8dcc4027dd0d75baf9d441625ed8930472165717f4732884c33f25d4ee6a6c9ae6c44aedad039b0b72cf42cab7f80d32b74061 e = 0x10001 c = 0x70c9133e1647e95c3cb99bd998a9028b5bf492929725a9e8e6d2e277fa0f37205580b196e5f121a2e83bc80a8204c99f5036a07c8cf6f96c420369b4161d2654a7eccbdaf583204b645e137b3bd15c5ce865298416fd5831cba0d947113ed5be5426b708b89451934d11f9aed9085b48b729449e461ff0863552149b965e22b6 d = gmpy2.invert(e, (p - 1 ) * (q - 1 )) m = pow (c, d, p * q) print (long_to_bytes(m))
b’\x02\xd3\xe4v\xea\x80r\x83\xda\x99\x88\xf5#\x08\xbbAT\x8b\xaf\xd2\xf4\xdc\x9f\xd3\xbf\xb7A\xc3\xcc\xc5`\xa1\x8b\x86\x18y\xd0&\x88\x10\xef\xbe\x83\xcer\xceC\x17\xec[\xb7%\x08\xef\x16\x1f\xab\x0c\x96\xa3\xdc N^\x8e,\xa3\x11{\x99U\xcd\x15o\xd7B\xf4L\x8f}&\xc5$\xca\xd5;\xf9\x02Y\xc1\xbbS\xfd4\x83M\x96\xa9\xbd;\x83/\xf7\x00afctf{R54_|5_$0_$imp13}’
26 [鹤城杯 2021]Crazy_Rsa_Tech 🚩flag:NSSCTF{H0w_Fun_13_HAstads_broadca5t_AtTack!}
💡hint:RSA
from Crypto.Util.number import *from Crypto.Util.Padding import *FLAG = bytes_to_long(pad(b"flag{??????}" ,64 )) def init_key (): p, q = getPrime(512 ), getPrime(512 ) n = p*q e = 9 while (GCD((p-1 )*(q-1 ),e)!=1 ): p, q = getPrime(512 ), getPrime(512 ) n = p*q d = inverse(e,(p-1 )*(q-1 )) return n,e,d n_list=list () c_list=list () for i in range (9 ): N,e,d=init_key() n_list.append(N) c=pow (FLAG,e,N) c_list.append(pow (FLAG,e,N)) assert (pow (c,d,N)==FLAG) print ("n_list:" ,n_list)print ("c_list:" ,c_list)
n_list: [71189786319102608575263218254922479901008514616376166401353025325668690465852130559783959409002115897148828732231478529655075366072137059589917001875303598680931962384468363842379833044123189276199264340224973914079447846845897807085694711541719515881377391200011269924562049643835131619086349617062034608799 , 92503831027754984321994282254005318198418454777812045042619263533423066848097985191386666241913483806726751133691867010696758828674382946375162423033994046273252417389169779506788545647848951018539441971140081528915876529645525880324658212147388232683347292192795975558548712504744297104487514691170935149949 , 100993952830138414466948640139083231443558390127247779484027818354177479632421980458019929149817002579508423291678953554090956334137167905685261724759487245658147039684536216616744746196651390112540237050493468689520465897258378216693418610879245129435268327315158194612110422630337395790254881602124839071919 , 59138293747457431012165762343997972673625934330232909935732464725128776212729547237438509546925172847581735769773563840639187946741161318153031173864953372796950422229629824699580131369991913883136821374596762214064774480548532035315344368010507644630655604478651898097886873485265848973185431559958627423847 , 66827868958054485359731420968595906328820823695638132426084478524423658597714990545142120448668257273436546456116147999073797943388584861050133103137697812149742551913704341990467090049650721713913812069904136198912314243175309387952328961054617877059134151915723594900209641163321839502908705301293546584147 , 120940513339890268554625391482989102665030083707530690312336379356969219966820079510946652021721814016286307318930536030308296265425674637215009052078834615196224917417698019787514831973471113022781129000531459800329018133248426080717653298100515701379374786486337920294380753805825328119757649844054966712377 , 72186594495190221129349814154999705524005203343018940547856004977368023856950836974465616291478257156860734574686154136925776069045232149725101769594505766718123155028300703627531567850035682448632166309129911061492630709698934310123778699316856399909549674138453085885820110724923723830686564968967391721281 , 69105037583161467265649176715175579387938714721653281201847973223975467813529036844308693237404592381480367515044829190066606146105800243199497182114398931410844901178842049915914390117503986044951461783780327749665912369177733246873697481544777183820939967036346862056795919812693669387731294595126647751951 , 76194219445824867986050004226602973283400885106636660263597964027139613163638212828932901192009131346530898961165310615466747046710743013409318156266326090650584190382130795884514074647833949281109675170830565650006906028402714868781834693473191228256626654011772428115359653448111208831188721505467497494581 ] c_list: [62580922178008480377006528793506649089253164524883696044759651305970802215270721223149734532870729533611357047595181907404222690394917605617029675103788705320032707977225447998111744887898039756375876685711148857676502670812333076878964148863713993853526715855758799502735753454247721711366497722251078739585 , 46186240819076690248235492196228128599822002268014359444368898414937734806009161030424589993541799877081745454934484263188270879142125136786221625234555265815513136730416539407710862948861531339065039071959576035606192732936477944770308784472646015244527805057990939765708793705044236665364664490419874206900 , 85756449024868529058704599481168414715291172247059370174556127800630896693021701121075838517372920466708826412897794900729896389468152213884232173410022054605870785910461728567377769960823103334874807744107855490558726013068890632637193410610478514663078901021307258078678427928255699031215654693270240640198 , 14388767329946097216670270960679686032536707277732968784379505904021622612991917314721678940833050736745004078559116326396233622519356703639737886289595860359630019239654690312132039876082685046329079266785042428947147658321799501605837784127004536996628492065409017175037161261039765340032473048737319069656 , 1143736792108232890306863524988028098730927600066491485326214420279375304665896453544100447027809433141790331191324806205845009336228331138326163746853197990596700523328423791764843694671580875538251166864957646807184041817863314204516355683663859246677105132100377322669627893863885482167305919925159944839 , 2978800921927631161807562509445310353414810029862911925227583943849942080514132963605492727604495513988707849133045851539412276254555228149742924149242124724864770049898278052042163392380895275970574317984638058768854065506927848951716677514095183559625442889028813635385408810698294574175092159389388091981 , 16200944263352278316040095503540249310705602580329203494665614035841657418101517016718103326928336623132935178377208651067093136976383774189554806135146237406248538919915426183225265103769259990252162411307338473817114996409705345401251435268136647166395894099897737607312110866874944619080871831772376466376 , 31551601425575677138046998360378916515711528548963089502535903329268089950335615563205720969393649713416910860593823506545030969355111753902391336139384464585775439245735448030993755229554555004154084649002801255396359097917380427525820249562148313977941413268787799534165652742114031759562268691233834820996 , 25288164985739570635307839193110091356864302148147148153228604718807817833935053919412276187989509493755136905193728864674684139319708358686431424793278248263545370628718355096523088238513079652226028236137381367215156975121794485995030822902933639803569133458328681148758392333073624280222354763268512333515 ]
解题脚本:
from Crypto.Util.number import *from gmpy2 import *n_list = [ 71189786319102608575263218254922479901008514616376166401353025325668690465852130559783959409002115897148828732231478529655075366072137059589917001875303598680931962384468363842379833044123189276199264340224973914079447846845897807085694711541719515881377391200011269924562049643835131619086349617062034608799 , 92503831027754984321994282254005318198418454777812045042619263533423066848097985191386666241913483806726751133691867010696758828674382946375162423033994046273252417389169779506788545647848951018539441971140081528915876529645525880324658212147388232683347292192795975558548712504744297104487514691170935149949 , 100993952830138414466948640139083231443558390127247779484027818354177479632421980458019929149817002579508423291678953554090956334137167905685261724759487245658147039684536216616744746196651390112540237050493468689520465897258378216693418610879245129435268327315158194612110422630337395790254881602124839071919 , 59138293747457431012165762343997972673625934330232909935732464725128776212729547237438509546925172847581735769773563840639187946741161318153031173864953372796950422229629824699580131369991913883136821374596762214064774480548532035315344368010507644630655604478651898097886873485265848973185431559958627423847 , 66827868958054485359731420968595906328820823695638132426084478524423658597714990545142120448668257273436546456116147999073797943388584861050133103137697812149742551913704341990467090049650721713913812069904136198912314243175309387952328961054617877059134151915723594900209641163321839502908705301293546584147 , 120940513339890268554625391482989102665030083707530690312336379356969219966820079510946652021721814016286307318930536030308296265425674637215009052078834615196224917417698019787514831973471113022781129000531459800329018133248426080717653298100515701379374786486337920294380753805825328119757649844054966712377 , 72186594495190221129349814154999705524005203343018940547856004977368023856950836974465616291478257156860734574686154136925776069045232149725101769594505766718123155028300703627531567850035682448632166309129911061492630709698934310123778699316856399909549674138453085885820110724923723830686564968967391721281 , 69105037583161467265649176715175579387938714721653281201847973223975467813529036844308693237404592381480367515044829190066606146105800243199497182114398931410844901178842049915914390117503986044951461783780327749665912369177733246873697481544777183820939967036346862056795919812693669387731294595126647751951 , 76194219445824867986050004226602973283400885106636660263597964027139613163638212828932901192009131346530898961165310615466747046710743013409318156266326090650584190382130795884514074647833949281109675170830565650006906028402714868781834693473191228256626654011772428115359653448111208831188721505467497494581 ] c_list = [ 62580922178008480377006528793506649089253164524883696044759651305970802215270721223149734532870729533611357047595181907404222690394917605617029675103788705320032707977225447998111744887898039756375876685711148857676502670812333076878964148863713993853526715855758799502735753454247721711366497722251078739585 , 46186240819076690248235492196228128599822002268014359444368898414937734806009161030424589993541799877081745454934484263188270879142125136786221625234555265815513136730416539407710862948861531339065039071959576035606192732936477944770308784472646015244527805057990939765708793705044236665364664490419874206900 , 85756449024868529058704599481168414715291172247059370174556127800630896693021701121075838517372920466708826412897794900729896389468152213884232173410022054605870785910461728567377769960823103334874807744107855490558726013068890632637193410610478514663078901021307258078678427928255699031215654693270240640198 , 14388767329946097216670270960679686032536707277732968784379505904021622612991917314721678940833050736745004078559116326396233622519356703639737886289595860359630019239654690312132039876082685046329079266785042428947147658321799501605837784127004536996628492065409017175037161261039765340032473048737319069656 , 1143736792108232890306863524988028098730927600066491485326214420279375304665896453544100447027809433141790331191324806205845009336228331138326163746853197990596700523328423791764843694671580875538251166864957646807184041817863314204516355683663859246677105132100377322669627893863885482167305919925159944839 , 2978800921927631161807562509445310353414810029862911925227583943849942080514132963605492727604495513988707849133045851539412276254555228149742924149242124724864770049898278052042163392380895275970574317984638058768854065506927848951716677514095183559625442889028813635385408810698294574175092159389388091981 , 16200944263352278316040095503540249310705602580329203494665614035841657418101517016718103326928336623132935178377208651067093136976383774189554806135146237406248538919915426183225265103769259990252162411307338473817114996409705345401251435268136647166395894099897737607312110866874944619080871831772376466376 , 31551601425575677138046998360378916515711528548963089502535903329268089950335615563205720969393649713416910860593823506545030969355111753902391336139384464585775439245735448030993755229554555004154084649002801255396359097917380427525820249562148313977941413268787799534165652742114031759562268691233834820996 , 25288164985739570635307839193110091356864302148147148153228604718807817833935053919412276187989509493755136905193728864674684139319708358686431424793278248263545370628718355096523088238513079652226028236137381367215156975121794485995030822902933639803569133458328681148758392333073624280222354763268512333515 ] n = 1 for i in n_list: n = n * i n_ = [] for i in n_list: n_.append(n // i) t = [] for i in range (9 ): t.append(inverse(n_[i], n_list[i])) x = 0 for i in range (len (n_list)): x = c_list[i] * n_[i] * t[i] + x x = x % n print (x)x = iroot(x, 9 )[0 ] print (long_to_bytes(x))
3678337284039442047026947312380394506988284605153398380909870598085147736828709178219597429308046538374273111663234962853201175297522552444068549756304348183089003998584929250444862897734669616839072634559776823068102560978738392642133409979083241310818961120830565330801827594023873873703163937572703881578432281109467318674533265052430906776650900523035132668203491899352234368836316318216812572637893433384928785981896373747430646617935503364537613820302679656375356094380483213814869276308187497478084540603362678580814022322799191778371368875742773945120383365613028633102737056410926701477700008313642639347163933146129361496566648131161287075292980980083166106192999528561889437021539352391671756010617540361596164032486633114877739259434431765044242037641759566659268290619705700083536966807192023377334915872207418596226819579720241509860110741821630775501873143209229299530346706612248414951753383716954165108266753409813119293227854442685830689203424064786691447734948037502729127922328149002842971722645909768174575776908113523451541199095073733017029558396658874593357205426105429760517295964966905772455366037986657671195106462661190327510507460112791663031458690187525393979689469548319821181450874331998372947479866557921497942728807505035932385939931524294822439633516457845581452433022749099648076725811489217888688273759202726271093237450290814247396662589614216704 b’flag{H0w_Fun_13_HAstads_broadca5t_AtTack!}\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16’
27 [SWPUCTF 2021 新生赛]crypto9 🚩flag:NSSCTF{dd5f0021-7a8e-ee05-f25e-7882abc5d984}
💡hint:其他
AKKPLX{qv5x0021-7n8w-wr05-x25w-7882ntu5q984} 脚本给你了,去解吧 letter_list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' def Get_KeyList (key ): key_list = [] for ch in key: key_list.append(ord (ch.upper()) - 65 ) return key_list def Encrypt (plaintext, key_list ): ciphertext = "" i = 0 for ch in plaintext: if 0 == i % len (key_list): i = 0 if ch.isalpha(): if ch.isupper(): ciphertext += letter_list[(ord (ch) - 65 + key_list[i]) % 26 ] i += 1 else : ciphertext += letter_list[(ord (ch) - 97 + key_list[i]) % 26 ].lower() i += 1 else : ciphertext += ch return ciphertext def Decrypt (ciphertext, key ): plaintext = "" i = 0 for ch in ciphertext: if 0 == i % len (key_list): i = 0 if ch.isalpha(): if ch.isupper(): plaintext += letter_list[(ord (ch) - 65 - key_list[i]) % 26 ] i += 1 else : plaintext += letter_list[(ord (ch) - 97 - key_list[i]) % 26 ].lower() i += 1 else : plaintext += ch return plaintext if __name__ == '__main__' : print ("加密请按D,解密请按E:" ) user_input = input (); while (user_input != 'D' and user_input != 'E' ): print ("输入有误!请重新输入:" ) user_input = input () print ("请输入密钥:" ) key = input () while (False == key.isalpha()): print ("输入有误!密钥为字母,请重新输入:" ) key = input () key_list = Get_KeyList(key) if user_input == 'D' : print ("请输入明文:" ) plaintext = input () ciphertext = Encrypt(plaintext, key_list) print ("密文为:\n%s" % ciphertext) else : print ("请输入密文:" ) ciphertext = input () plaintext = Decrypt(ciphertext, key_list) print ("明文为:\n%s" % plaintext)
解题脚本:
letter_list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' def Get_KeyList (key ): """将密钥转换为数字列表(A=0, B=1, ...)""" return [ord (ch.upper()) - 65 for ch in key] def Decrypt (ciphertext, key ): """维吉尼亚解密函数""" plaintext = "" key_list = Get_KeyList(key) i = 0 for ch in ciphertext: if i % len (key_list) == 0 : i = 0 if ch.isalpha(): if ch.isupper(): plaintext += letter_list[(ord (ch) - 65 - key_list[i]) % 26 ] else : plaintext += letter_list[(ord (ch) - 97 - key_list[i]) % 26 ].lower() i += 1 else : plaintext += ch return plaintext ciphertext = "AKKPLX{qv5x0021-7n8w-wr05-x25w-7882ntu5q984}" common_keys = ["CTF" , "FLAG" , "NSS" , "KEY" , "SECRET" ] for key in common_keys: decrypted = Decrypt(ciphertext, key) print (f"密钥 '{key} ': {decrypted} " ) if not any ("NSS" in Decrypt(ciphertext, key) for key in common_keys): print ("\n尝试暴力破解3字母密钥..." ) from itertools import product for key_tuple in product(letter_list, repeat=3 ): key = '' .join(key_tuple) decrypted = Decrypt(ciphertext, key) if "NSS" in decrypted: print (f"找到可能密钥: {key} , 解密结果: {decrypted} " ) break
密钥 ‘CTF’: YRFNSS{oc5s0021-7l8d-rp05-e25r-7882lap5o984} 密钥 ‘FLAG’: VZKJGM{qp5s0021-7c8w-qm05-m25w-7882hoj5q984} 密钥 ‘NSS’: NSSCTF{dd5f0021-7a8e-ee05-f25e-7882abc5d984} 密钥 ‘KEY’: QGMFHZ{gr5z0021-7d8s-yh05-t25y-7882dpw5g984} 密钥 ‘SECRET’: IGIYHE{yr5v0021-7w8s-dz05-t25u-7882wpb5y984}
28 [SWPUCTF 2021 新生赛]crypto5 🚩flag:NSSCTF{because_i_like}
💡hint:RSA
flag= 25166751653530941364839663846806543387720865339263370907985655775152187319464715737116599171477207047430065345882626259880756839094179627032623895330242655333 n= 134109481482703713214838023035418052567000870587160796935708584694132507394211363652420160931185332280406437290210512090663977634730864032370977407179731940068634536079284528020739988665713200815021342700369922518406968356455736393738946128013973643235228327971170711979683931964854563904980669850660628561419
这个题目信息,只给了一个ciphertext(flag)和n,得知为RSA。思考一下RSA几种常见攻击,可以断定这是低加密指数小明文攻击。
from Crypto.Util.number import *import gmpy2flag = 25166751653530941364839663846806543387720865339263370907985655775152187319464715737116599171477207047430065345882626259880756839094179627032623895330242655333 e = 2 while (e < 2 **6 ): e += 1 print (gmpy2.iroot(flag , e)) print (long_to_bytes(29305044677847256883031643626546437461373017758852477 ))
(mpz(29305044677847256883031643626546437461373017758852477), True) (mpz(2239787367494658961926395047063833603906), False) (mpz(30211023082079078184793394727428), False) (mpz(171187162713350842203231979), False) (mpz(30607823753538418950179), False) (mpz(47326391870653513426), False) (mpz(308305161786402933), False) (mpz(5496455501691892), False) (mpz(203782133965548), False) (mpz(13083851218710), False) (mpz(1281610142349), False) (mpz(174950918127), False) (mpz(31145010208), False) (mpz(6879417989), False) (mpz(1814981430), False) (mpz(555252340), False) (mpz(192421706), False) (mpz(74138084), False) (mpz(31280773), False) (mpz(14275227), False) (mpz(6974518), False) (mpz(3617160), False) (mpz(1977120), False) (mpz(1132082), False) (mpz(675554), False) (mpz(418271), False) (mpz(267679), False) (mpz(176479), False) (mpz(119521), False) (mpz(82942), False) (mpz(58846), False) (mpz(42602), False) (mpz(31417), False) (mpz(23563), False) (mpz(17950), False) (mpz(13871), False) (mpz(10862), False) (mpz(8610), False) (mpz(6903), False) (mpz(5592), False) (mpz(4575), False) (mpz(3778), False) (mpz(3146), False) (mpz(2640), False) (mpz(2233), False) (mpz(1901), False) (mpz(1630), False) (mpz(1406), False) (mpz(1219), False) (mpz(1063), False) (mpz(932), False) (mpz(821), False) (mpz(727), False) (mpz(646), False) (mpz(577), False) (mpz(517), False) (mpz(465), False) (mpz(420), False) (mpz(380), False) (mpz(345), False) (mpz(315), False) (mpz(287), False) b’NSSCTF{because_i_like}’
29 [LitCTF 2023]原来你也玩原神 (初级) 🚩flag:NSSCTF{YUANLAINIYEWANYUANSHENWWW}
💡hint:其他
题目描述:旅行者收到了一封奇怪的来信,是提瓦特大陆的语言!
我玩原神但是我看不懂)

最后一行,对照拉丁文。
LITCTF{YUANLAINIYEWANYUANSHENWWW}
来自一个大佬的截图:

30 [AFCTF 2018]Vigenère 🚩flag:NSSCTF{Whooooooo_U_Gotcha!}
💡hint:维吉尼亚 古典密码 字频统计
在线解密网站:https://www.guballa.de/vigenere-solver\
断网工具:https://github.com/atomcated/Vigenere

31 [BJDCTF 2020]rsa 🚩flag:NSSCTF{p_is_common_divisor}
💡hint:共享素数 RSA 素数分解
from Crypto.Util.number import getPrime,bytes_to_longflag=open ("flag" ,"rb" ).read() p=getPrime(1024 ) q=getPrime(1024 ) assert (e<100000 )n=p*q m=bytes_to_long(flag) c=pow (m,e,n) print c,nprint pow (294 ,e,n)p=getPrime(1024 ) n=p*q m=bytes_to_long("BJD" *32 ) c=pow (m,e,n) print c,n''' output: 12641635617803746150332232646354596292707861480200207537199141183624438303757120570096741248020236666965755798009656547738616399025300123043766255518596149348930444599820675230046423373053051631932557230849083426859490183732303751744004874183062594856870318614289991675980063548316499486908923209627563871554875612702079100567018698992935818206109087568166097392314105717555482926141030505639571708876213167112187962584484065321545727594135175369233925922507794999607323536976824183162923385005669930403448853465141405846835919842908469787547341752365471892495204307644586161393228776042015534147913888338316244169120 13508774104460209743306714034546704137247627344981133461801953479736017021401725818808462898375994767375627749494839671944543822403059978073813122441407612530658168942987820256786583006947001711749230193542370570950705530167921702835627122401475251039000775017381633900222474727396823708695063136246115652622259769634591309421761269548260984426148824641285010730983215377509255011298737827621611158032976420011662547854515610597955628898073569684158225678333474543920326532893446849808112837476684390030976472053905069855522297850688026960701186543428139843783907624317274796926248829543413464754127208843070331063037 381631268825806469518166370387352035475775677163615730759454343913563615970881967332407709901235637718936184198930226303761876517101208677107311006065728014220477966000620964056616058676999878976943319063836649085085377577273214792371548775204594097887078898598463892440141577974544939268247818937936607013100808169758675042264568547764031628431414727922168580998494695800403043312406643527637667466318473669542326169218665366423043579003388486634167642663495896607282155808331902351188500197960905672207046579647052764579411814305689137519860880916467272056778641442758940135016400808740387144508156358067955215018 979153370552535153498477459720877329811204688208387543826122582132404214848454954722487086658061408795223805022202997613522014736983452121073860054851302343517756732701026667062765906277626879215457936330799698812755973057557620930172778859116538571207100424990838508255127616637334499680058645411786925302368790414768248611809358160197554369255458675450109457987698749584630551177577492043403656419968285163536823819817573531356497236154342689914525321673807925458651854768512396355389740863270148775362744448115581639629326362342160548500035000156097215446881251055505465713854173913142040976382500435185442521721 12806210903061368369054309575159360374022344774547459345216907128193957592938071815865954073287532545947370671838372144806539753829484356064919357285623305209600680570975224639214396805124350862772159272362778768036844634760917612708721787320159318432456050806227784435091161119982613987303255995543165395426658059462110056431392517548717447898084915167661172362984251201688639469652283452307712821398857016487590794996544468826705600332208535201443322267298747117528882985955375246424812616478327182399461709978893464093245135530135430007842223389360212803439850867615121148050034887767584693608776323252233254261047 '''
解题脚本:
from Crypto.Util.number import long_to_bytesfrom math import gcdfrom gmpy2 import invertc1 = 12641635617803746150332232646354596292707861480200207537199141183624438303757120570096741248020236666965755798009656547738616399025300123043766255518596149348930444599820675230046423373053051631932557230849083426859490183732303751744004874183062594856870318614289991675980063548316499486908923209627563871554875612702079100567018698992935818206109087568166097392314105717555482926141030505639571708876213167112187962584484065321545727594135175369233925922507794999607323536976824183162923385005669930403448853465141405846835919842908469787547341752365471892495204307644586161393228776042015534147913888338316244169120 n1 = 13508774104460209743306714034546704137247627344981133461801953479736017021401725818808462898375994767375627749494839671944543822403059978073813122441407612530658168942987820256786583006947001711749230193542370570950705530167921702835627122401475251039000775017381633900222474727396823708695063136246115652622259769634591309421761269548260984426148824641285010730983215377509255011298737827621611158032976420011662547854515610597955628898073569684158225678333474543920326532893446849808112837476684390030976472053905069855522297850688026960701186543428139843783907624317274796926248829543413464754127208843070331063037 hint = 381631268825806469518166370387352035475775677163615730759454343913563615970881967332407709901235637718936184198930226303761876517101208677107311006065728014220477966000620964056616058676999878976943319063836649085085377577273214792371548775204594097887078898598463892440141577974544939268247818937936607013100808169758675042264568547764031628431414727922168580998494695800403043312406643527637667466318473669542326169218665366423043579003388486634167642663495896607282155808331902351188500197960905672207046579647052764579411814305689137519860880916467272056778641442758940135016400808740387144508156358067955215018 c2 = 979153370552535153498477459720877329811204688208387543826122582132404214848454954722487086658061408795223805022202997613522014736983452121073860054851302343517756732701026667062765906277626879215457936330799698812755973057557620930172778859116538571207100424990838508255127616637334499680058645411786925302368790414768248611809358160197554369255458675450109457987698749584630551177577492043403656419968285163536823819817573531356497236154342689914525321673807925458651854768512396355389740863270148775362744448115581639629326362342160548500035000156097215446881251055505465713854173913142040976382500435185442521721 n2 = 12806210903061368369054309575159360374022344774547459345216907128193957592938071815865954073287532545947370671838372144806539753829484356064919357285623305209600680570975224639214396805124350862772159272362778768036844634760917612708721787320159318432456050806227784435091161119982613987303255995543165395426658059462110056431392517548717447898084915167661172362984251201688639469652283452307712821398857016487590794996544468826705600332208535201443322267298747117528882985955375246424812616478327182399461709978893464093245135530135430007842223389360212803439850867615121148050034887767584693608776323252233254261047 q = gcd(n1, n2) assert q != 1 p1 = n1 // q p2 = n2 // q for e in range (1 , 100000 ): if pow (294 , e, n1) == hint: print (f"找到e = {e} " ) break else : raise ValueError("未找到正确的e" ) phi = (p1 - 1 ) * (q - 1 ) d = invert(e, phi) m = pow (c1, d, n1) flag = long_to_bytes(m) print ("解密结果:" , flag)
找到e = 52361 解密结果: b’BJD{p_is_common_divisor}’
32 [HDCTF 2023]Normal_Rsa 🚩flag:NSSCTF{0b3663ed-67e4-44e2-aee7-7c2d8665b63c}
💡hint:共享素数 RSA 素数分解
from Crypto.Util.number import *m=bytes_to_long(b'HDCTF{0b3663ed-67e4-44e2-aee7-7c2d8665b63c}' ) e=65537 p=getPrime(256 ) q=6704006258427795304220450411280948926213189680360135534636452074716135019217911134480777251273836898349926894302122011679095979445240343891749741039976761 r=getPrime(512 ) n=p*q*r P=pow (p,2 ,n) Q=pow (q,2 ,n) c=pow (m,e,n) print (f"P = {P} " )print (f"Q = {Q} " )print (f"n = {n} " )print (f"c = {c} " )''' P = 6773247693445539441213578786581644136043035242620265251725630106817272212428325283262417364786451280269516220237289567904055371962564710888510272312707201 Q = 44943699913039047357456835559925378512493523252980366265686899925123157887149890185055864945749408514100461655676474535153113631214288057465776668291975220848776401405531599573114898492452990847774628035552581539370236080368457643523158920565504112005843410442573511095306233906498204203659537135943420051121 n = 4785613888465991171479248142015453309149548888755453367991501772592797686075465426815591528773123474962122102667475893532087343900904799831474817826058951265607078893487357878501280782935653048309499430170214015422492927323961394806106719569168457890040223027119115392961801582406287167644266319898276785787730947633037300317098453409851410936140488150390919951503767522517809035474567 c = 2247027561636791381460194811205520085150851211795956750955965051548230844233212462525163107917067768507367576366327035846089534916090521357212722275045521111077106695721780943857231570836500588468487620819893688830570842176795906808347617421353983094639290979158413935035603633331786978227439155042365130799647385116773171906670409535157184391352888875130028955334874727206292146950544 '''
解题脚本:
import gmpy2from libnum import n2sP = 6773247693445539441213578786581644136043035242620265251725630106817272212428325283262417364786451280269516220237289567904055371962564710888510272312707201 Q = 44943699913039047357456835559925378512493523252980366265686899925123157887149890185055864945749408514100461655676474535153113631214288057465776668291975220848776401405531599573114898492452990847774628035552581539370236080368457643523158920565504112005843410442573511095306233906498204203659537135943420051121 n = 4785613888465991171479248142015453309149548888755453367991501772592797686075465426815591528773123474962122102667475893532087343900904799831474817826058951265607078893487357878501280782935653048309499430170214015422492927323961394806106719569168457890040223027119115392961801582406287167644266319898276785787730947633037300317098453409851410936140488150390919951503767522517809035474567 c = 2247027561636791381460194811205520085150851211795956750955965051548230844233212462525163107917067768507367576366327035846089534916090521357212722275045521111077106695721780943857231570836500588468487620819893688830570842176795906808347617421353983094639290979158413935035603633331786978227439155042365130799647385116773171906670409535157184391352888875130028955334874727206292146950544 e = 65537 p = gmpy2.isqrt(P) q = gmpy2.isqrt(Q) r = n // p // q phi = (p - 1 ) * (r - 1 ) d = gmpy2.invert(e, phi) m = pow (c, d, r) decrypted_message = n2s(int (m)) print ("Decrypted message:" , decrypted_message)
Decrypted message: b’HDCTF{0b3663ed-67e4-44e2-aee7-7c2d8665b63c}’
33 [NSSCTF 2022 Spring Recruit]Vigenere 🚩flag:NSSCTF{crypto_needs_you}
💡hint:维吉尼亚 古典密码 字频统计
在线解密网站:https://www.guballa.de/vigenere-solver\
断网工具:https://github.com/atomcated/Vigenere

NSSCTF{crypto_needs_you}
34 [CISCN 2023 初赛]Sign_in_passwd 🚩flag:NSSCTF{8e4b2888-6148-4003-b725-3ff0d93a6ee4}
💡hint:base
j2rXjx8yjd=YRZWyTIuwRdbyQdbqR3R9iZmsScutj2iqj3/tidj1jd=D GHI3KLMNJOPQRSTUb%3DcdefghijklmnopWXYZ%2F12%2B406789VaqrstuvwxyzABCDEF5
换表base64
import base64import stringfrom Crypto.Util.number import *str1 = "j2rXjx8yjd=YRZWyTIuwRdbyQdbqR3R9iZmsScutj2iqj3/tidj1jd=D" new = "GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF" inti = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" print (base64.b64decode(str1.translate(str .maketrans(new,inti))))
b’flag{8e4b2888-6148-4003-b725-3ff0d93a6ee4}’
35 [BJDCTF 2020]EasyRSA 🚩flag:NSSCTF{Advanced_mathematics_is_too_hard!!!}
💡hint:RSA
from Crypto.Util.number import getPrime,bytes_to_longfrom sympy import Derivativefrom fractions import Fractionfrom secret import flagp=getPrime(1024 ) q=getPrime(1024 ) e=65537 n=p*q z=Fraction(1 ,Derivative(arctan(p),p))-Fraction(1 ,Derivative(arth(q),q)) m=bytes_to_long(flag) c=pow (m,e,n) print (c,z,n)''' output: 7922547866857761459807491502654216283012776177789511549350672958101810281348402284098310147796549430689253803510994877420135537268549410652654479620858691324110367182025648788407041599943091386227543182157746202947099572389676084392706406084307657000104665696654409155006313203957292885743791715198781974205578654792123191584957665293208390453748369182333152809882312453359706147808198922916762773721726681588977103877454119043744889164529383188077499194932909643918696646876907327364751380953182517883134591810800848971719184808713694342985458103006676013451912221080252735948993692674899399826084848622145815461035 32115748677623209667471622872185275070257924766015020072805267359839059393284316595882933372289732127274076434587519333300142473010344694803885168557548801202495933226215437763329280242113556524498457559562872900811602056944423967403777623306961880757613246328729616643032628964072931272085866928045973799374711846825157781056965164178505232524245809179235607571567174228822561697888645968559343608375331988097157145264357626738141646556353500994924115875748198318036296898604097000938272195903056733565880150540275369239637793975923329598716003350308259321436752579291000355560431542229699759955141152914708362494482 15310745161336895413406690009324766200789179248896951942047235448901612351128459309145825547569298479821101249094161867207686537607047447968708758990950136380924747359052570549594098569970632854351825950729752563502284849263730127586382522703959893392329333760927637353052250274195821469023401443841395096410231843592101426591882573405934188675124326997277775238287928403743324297705151732524641213516306585297722190780088180705070359469719869343939106529204798285957516860774384001892777525916167743272419958572055332232056095979448155082465977781482598371994798871917514767508394730447974770329967681767625495394441 '''
解题脚本:
from Crypto.Util.number import long_to_bytesfrom gmpy2 import isqrt, invertc = 7922547866857761459807491502654216283012776177789511549350672958101810281348402284098310147796549430689253803510994877420135537268549410652654479620858691324110367182025648788407041599943091386227543182157746202947099572389676084392706406084307657000104665696654409155006313203957292885743791715198781974205578654792123191584957665293208390453748369182333152809882312453359706147808198922916762773721726681588977103877454119043744889164529383188077499194932909643918696646876907327364751380953182517883134591810800848971719184808713694342985458103006676013451912221080252735948993692674899399826084848622145815461035 z = 32115748677623209667471622872185275070257924766015020072805267359839059393284316595882933372289732127274076434587519333300142473010344694803885168557548801202495933226215437763329280242113556524498457559562872900811602056944423967403777623306961880757613246328729616643032628964072931272085866928045973799374711846825157781056965164178505232524245809179235607571567174228822561697888645968559343608375331988097157145264357626738141646556353500994924115875748198318036296898604097000938272195903056733565880150540275369239637793975923329598716003350308259321436752579291000355560431542229699759955141152914708362494482 n = 15310745161336895413406690009324766200789179248896951942047235448901612351128459309145825547569298479821101249094161867207686537607047447968708758990950136380924747359052570549594098569970632854351825950729752563502284849263730127586382522703959893392329333760927637353052250274195821469023401443841395096410231843592101426591882573405934188675124326997277775238287928403743324297705151732524641213516306585297722190780088180705070359469719869343939106529204798285957516860774384001892777525916167743272419958572055332232056095979448155082465977781482598371994798871917514767508394730447974770329967681767625495394441 e = 65537 s = isqrt(z + 2 * n) assert s * s == z + 2 * n delta = s * s - 4 * n p = (s - isqrt(delta)) // 2 q = n // p assert p * q == nassert p + q == sphi = (p - 1 ) * (q - 1 ) d = invert(e, phi) m = pow (c, d, n) flag = long_to_bytes(m) print ("解密结果:" , flag)
解密结果: b’BJD{Advanced_mathematics_is_too_hard!!!}’
36 [SWPUCTF 2021 新生赛]crypto1 🚩flag:NSSCTF{d64dba66-b608-4255-b888-0b0f25c2f90e}
💡hint:RSA
from gmpy2 import *from Crypto.Util.number import *flag = '****************************' flag = {"asfajgfbiagbwe" } p = getPrime(2048 ) q = getPrime(2048 ) m1 = bytes_to_long(bytes (flag.encode())) e1e2 = 3087 n = p*q print ()flag1 = pow (m1,e1,n) flag2 = pow (m1,e2,n) print ('flag1= ' +str (flag1))print ('flag2= ' +str (flag2))print ('n= ' +str (n))
解题脚本:
import gmpy2import libnumimport sympyfrom Crypto.Util.number import long_to_bytesdef RsaSameModuleAttack (e1, e2, c1, c2, n ): e1, e2, c1, c2, n = int (e1), int (e2), int (c1), int (c2), int (n) print ("i,e2:" , e1, e2) print (gmpy2.gcd(e1, e2)) s = gmpy2.gcdext(e1, e2) print (s) s1 = s[1 ] s2 = s[2 ] if s1 < 0 : s1 = - s1 c1 = gmpy2.invert(c1, n) elif s2 < 0 : s2 = - s2 c2 = gmpy2.invert(c2, n) m = (pow (c1, s1, n) * pow (c2, s2, n)) % n return int (m) def lowEncryptionIndex (c, n, e ): for k in range (200000000 ): if gmpy2.iroot(k * n + c, e)[1 ]: return gmpy2.iroot(k * n + c, e)[0 ] return False if __name__ == '__main__' : flag1 = 463634070971821449698012827631572665302589213868521491855038966879005784397309389922926838028598122795187584361359142761652619958273094398420314927073008031088375892957173280915904309949716842152249806486027920136603248454946737961650252641668562626310035983343018705370077783879047584582817271215517599531278507300104564011142229942160380563527291388260832749808727470291331902902518196932928128107067117198707209620169906575791373793854773799564060536121390593687449884988936522369331738199522700261116496965863870682295858957952661531894477603953742494526632841396338388879198270913523572980574440793543571757278020533565628285714358815083303489096524318164071888139412436112963845619981511061231001617406815056986634680975142352197476024575809514978857034477688443230263761729039797859697947454810551009108031457294164840611157524719173343259485881089252938664456637673337362424443150013961181619441267926981848009107466576314685961478748352388452114042115892243272514245081604607798243817586737546663059737344687130881861357423084448027959893402445303299089606081931041217035955143939567456782107203447898345284731038150377722447329202078375870541529539840051415759436083384408203659613313535094343772238691393447475364806171594 flag2 = 130959534275704453216282334815034647265875632781798750901627773826812657339274362406246297925411291822193191483409847323315110393729020700526946712786793380991675008128561863631081095222226285788412970362518398757423705216112313533155390315204875516645459370629706277876211656753247984282379731850770447978537855070379324935282789327428625259945250066774049650951465043700088958965762054418615838049340724639373351248933494355591934236360506778496741051064156771092798005112534162050165095430065000827916096893408569751085550379620558282942254606978819033885539221416335848319082054806148859427713144286777516251724474319613960327799643723278205969253636514684757409059003348229151341200451785288395596484563480261212963114071064979559812327582474674812225260616757099890896900340007990585501470484762752362734968297532533654846190900571017635959385883945858334995884341767905619567505341752047589731815868489295690574109758825021386698440670611361127170896689015108432408490763723594673299472336065575301681055583084547847733168801030191262122130369687497236959760366874106043801542493392227424890925595734150487586757484304609945827925762382889592743709682485229267604771944535469557860120878491329984792448597107256325783346904408 n = 609305637099654478882754880905638123124918364116173050874864700996165096776233155524277418132679727857702738043786588380577485490575591029930152718828075976000078971987922107645530323356525126496562423491563365836491753476840795804040219013880969539154444387313029522565456897962200817021423704204077133003361140660038327458057898764857872645377236870759691588009666047187685654297678987435769051762120388537868493789773766688347724903911796741124237476823452505450704989455260077833828660552130714794889208291939055406292476845194489525212129635173284301782141617878483740788532998492403101324795726865866661786740345862631916793208037250277376942046905892342213663197755010315060990871143919384283302925469309777769989798197913048813940747488087191697903624669415774198027063997058701217124640082074789591591494106726857376728759663074734040755438623372683762856958888826373151815914621262862750497078245369680378038995425628467728412953392359090775734440671874387905724083226246587924716226512631671786591611586774947156657178654343092123117255372954798131265566301316033414311712092913492774989048057650627801991277862963173961355088082419091848569675686058581383542877982979697235829206442087786927939745804017455244315305118437 e1e2 = 3087 for e1 in range (2 , e1e2): if e1e2 % e1 == 0 : e2 = e1e2 // e1 if gmpy2.gcd(e1, e2): c = RsaSameModuleAttack(e1, e2, flag1, flag2, n) e = gmpy2.gcd(e1, e2) result = lowEncryptionIndex(c, n, e) if result: print (long_to_bytes(result))
运行时间会比较长:
b’\x10H\x9e\xdd\x1f9\xbd\x96\xa1u\xa1oVxR\xe4\x84\xe4fb\xc5\x1bKfO\xddE\xb5*\xf6”\x91zY\xb2\x8f\xe7\x89\xcd\x046\xd9\x12\x1d9\xe7\x14\x08\xb3\xd6\xcd\x8f\xb7\xa1v+\xba\x85\xe0(:w\xce\xf5ol\xe9;\x8e\xd0b\x1e\x14\n\x92\x0b\xe9\x99\xd5G\x95\x082\xb4\xc3\x8cL\xd5\x0c^p\xec\xa4\x01\x88E\x15\x8a}i%K`\xf5\xff\xfen<\x0e\xc3\x88u\x07\x82\xb8\xdc\xbf\xb0\xcba\xe3\xe1\xeb\xbf\xc0\x12#\xfd8\x02I\x83\xc5\xcffr\xdb\x85\xf6\xed\x93\x10\n\x1b\xfb\x10M\xa1\xa1\x82t\xcb\xbc\xae\x19\x91R\x81\xd0\xdc\xafF\xba\x95A\xe6\x02\x06Lyu\xb2Iv\xb5\xdf\x1d-=\x16\xe7@)\x83m\x08Y\xca$V\xcaI\xc1\xf0\xcf\x94:ca\xc4\x0f\xa2\xf4\nz\xbbR\x90\x01\,\xdf;\xe0|\xbb\xc1\xab\xf4k\xb7^\xb9T\xcc;Xp\x9e\xe9\xed\xf7\x83\x10\xebr\xf3?\xd9\x81 \xf7)\xf6\xdd\xb9\xb8\x12B\x913_$\xbd\x0fm!>\xd2\'~P\x9f\xbcJ\xb0\xf1B\xbd\x17!\x9co\xeb/\x08<\xad\xfb\xe7R\xbc\x11\xc8\x845\x062\x10\x82\xc6p\xbb\xe7$\x8b\x08N\x06\xa80\x9f\n\x90T\x9bd\xd1\xa9\x80\xab\xad\x8c6\xcf\x80\xe0\xa8*7\x99\x1f\xb2\xf92}\x1d\xb1w\xb1\xb8\x9f;\x06\x0bC\xc5\xfeG\xc3M\xfcg\xa0h\x8d\xac\rl\xb4F\xb9\xb5\xaa\xcc\x9f\xf96V\xf69\xec\x8e=:\xf5K%\xd3\xe3!OC\xd6\xcb,\xaa|P3\x07\xdfF\xb9\x12\xeb\x84\xe4\xc6;g\x08\xab\x1a\x9b\xfe\x10\x96l\x9dP:\xc5\xf8\x00L\xd6L7\x10\x10\x1c\xb5\xeb\x9dT\xc2Y\xd9s\x8d\x99\xb5[.\xd5\xfe\x95Q\xc4$~F\xad\x1d-?\x0fo\xd1\xbe\r\xa0\xeb\xf9X\xd3”\x13\x03Tm2=\xb7\x87Fs\x07\x8dJ<\xe8\xe2bL$\xab\x83\x00Y\r\xea\xe6_Y\xc7\xcf\x1b\x02\xf26\xd7]\xb8\xc0\xe2'\x86\x9b\xc4x\x99\x10\x92\xdbF\x95\xc3\x13M|j\xe1\xa7w\xd7’ b’NSSCTF{d64dba66-b608-4255-b888-0b0f25c2f90e}’ b’Y\x81U\xd5<R[w\x10\xe6\x1d9\xecq?\x01\x1ew\x1cq\xa6\xa9>\x8fH|F\x0f37\xf7\xb9\xd8\xf1\n\xff\xac\xba\xc8\xa5j\xec\xe78\x19\xf2\x831B\xca\x96\xd12\xa3L2\xb6\xaf\xe6\xfd\x16\xe3ER\x87L\xc6[\x929\xbd\xd2=\x12\x9c\x991\x86$0\x16\xd9\x8c\xf5m\xa53'\xf0\xe9\xa9L\x8c\xc6\x13/1\xf1D\xc2\xb2\xa1\xd7\xe8\x81k6m\xfa\x86;\xb9X\x86\x85`\xe3\x9f\x84\xfaW\xf2\x1d\xe5\xe4\xa5\xb9K\xed\x16\xdb\xdb\xbe\x00:\x7f\x91|+\xba\x90\x8c\xd4\xc4)>6\xf81\xe7\xff\xb6M0\x80\xfd2J#\x16\xb8\xb4\x10\xed\xc4S4\xd3?\xf0\x0b\rG 8\x8e\xa8\xceU\t2+\xbe\xb1\x0er\x98o9\xf5{\x1ab\x03,G\nn\r\xf6\x1a\xd1v\xe7\x9dO\xdf\x7f\x9d\xb2\xf8\x13\x84\xea\xc5\x83\xc5\x11\xea\x9c\xe1\xfc\x8aWs\xb17\x88\xa8\xfa\xd3\x1d\xf9\x9c\x08X\xdc\xdc\x8d J1igg\x97\x10}V\xa0?\xca\x91\x84\xd5\xcf\xc0\x90\x8c\x94\xf1)\xd9pl\xddJ\x91r2q\xfd?\xcc\xbd\xde\r\xe7\xe2#7tmI\x9c\xea\xee\\x99lME\xbb\xe5\xb5\xaf]\xf2\x08\xec\x16\x01(M\xab\xfan\xc9\x02\x0e\x7f\x94Z\x8e\xad\xaa\xa5g\xb7h\xc5d\xdc%y\x91\xcfS_.\x93\xac\xc9/\x86\xdf\xe0\xf0L\x96\x17\x82H\xd7\xa8c\xefEZ\xd4p\x16”\xcc\x00\xa7\xaa\r\xbe\x9f}\xd9\\xe3\xd9\xde\x9c[\xa6\xd25\xddx\xb0\xb5\xcd5\xe9u \x04\xbf\xcfZ\xa4=\x8eE\x91\xf3'\xe627F\x0f\x9b&\x1d\xd6lG\xdb\xa5\x91\xab\xc4\x1f\n]\x9e\xf5F\xe2\xc3\xac\xbf+2\xec\xc1\xb3\x89\x8b\x91.\x9c\xe73\xd0\xb4v\xdd\x83\xb3t\x02\x01\x98\xc1tsP\x90\xde\xf3\x85\xcd\xda\xd6u_\xab\x0eIvs\x01{oQI\x1c\xbd{\x945\xfc\xa5\xe2c\x16\x9e)\xb0\x80D\xb2%\xa45\xca\x94\xdc\xd2v=\xd9{-~&*\xfa\x94j\x80\xab&\xdcS\xf1\x92\x91^\xa5\x13\\xe5\xb3Z’
37 [BJDCTF 2020]rsa_output 🚩flag:NSSCTF{r3a_C0mmoN_moD@_4ttack}
💡hint:RSA
{21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111 ,2767 } {21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111 ,3659 } message1=20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599 message2=11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227
解题脚本:
import gmpy2from Crypto.Util.number import *n = 21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111 e1 = 2767 n1 = 21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111 c1 = 20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599 e2 = 3659 n2 = 21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111 c2 = 11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227 def rsa_mod_same_N (e1, c1, e2, c2, n ): s, s1, s2 = gmpy2.gcdext(e1, e2) print (s, s1, s2) m = gmpy2.mod(gmpy2.powmod(c1, s1, n)*gmpy2.powmod(c2,s2,n), n) return m m = rsa_mod_same_N(e1, c1, e2, c2, n) print (long_to_bytes(m))
1 -201 152 b‘BJD{r3a_C0mmoN_moD@_4ttack}’
38 [闽盾杯 2021]decode 🚩flag:NSSCTF{G00d_w4y_tO_cR4ck_RS4}
💡hint:RSA
n1: 15228664629164509105936278301396170708905691970126305196584505186788860519598413718493859625462561931380632032431490419378905593909771649295663481782473029836321132574188559245931660756414915507930357509270674460219615256962333464689419869130366867401404262606367700782040693275068101244535880649261286041921882470460606034302142183971677715439862839410834231609821777031530457674591868138859358815039755085358568037032478394036448363183057305077227769673701227083943898736796552550712057417053897722979700329662099072959306298177351997084389916443815546425080826441671985030755256185725913397986385179516049927425591 n2: 28182418532443955655250943929828439725377604572088962537896240628709829618999901367131159759359513146864646169253348651905865895468151210748207509325666501438590382812326109260537618829438786609626137074778638549998280533912080708785604673270460635181275360847313985764185991865570533815651261638439461846512012164531330949433517277559149828806588070421852157781670188281908625986974579194819272643409859915715455134433970119584552350648013116998668938513347083566970423327936691885137812528912263666957628197241313496232397910546498542303925205356813548741679943691886217742767778075067797422624969714343428365022749 n3: 18355811159408154065817199279776805621878757240392366715869421799780946779485225342662736231980532326015283372375030686507311099745671828649419794838611580909610100636296701054995302819692794479292794716441442731393027118795245239019609474743841061251498233337758043553376098591254587406941205804917663153256036922860462415387926973551020540123742773938055950168965005226319984869124543783579240130888344231027912143592472823564266887957101575622993773291455143915263715932280728961208233983782906070719786115187115449430196335973764600533097718947377609348244073036523422892353195107093782201003551217830556519184839 e1: 65537 e2: 27751 e3: 65537 c1: 5368342382489380107251269030258282008067103595899117880173297169710980852124379736420135829984131832023988667774795223808420069001078159756328642298736759964890517323144475742861501409284299556459601222657540302786301791897975932176538612601162552795835603779910738886150925504885639254302406755008796950704938463132687940418772021406619622090999564746948113296328739593309200238996686945891130656599419832796482095787039339269564880847130379179831744694000940207887150388411084465949903406848727641093033681144598595895383689139227400553234701993087147186292040330589331703587405822925483701667354935313494938769206 c2: 21521672635651854919517759696514027081496995002884626306313384597771682621826437868933822942195279941318573525337109548152966094293276717095298929811895186384560362917891928656637913236676702009205642367801075592458101830488916914437754803979953027152373619293870115731171449223105986403604973873007338969000153480949617700626516389419935352576014084068271819009465242491467427642787306345049280205827574043586767133396458785487959251540831856187380154825027964867977651727983254127239427622549059938701125498520279503972702883327594442747467858234391945790597844344295786118320620376681461727686876948563884520137741 c3: 13940747781246179701167820858098775936269078279837839169409057305686612176371099274767269714494905207551971162649902129137425806839867713157472497469542260664882313041602553845621113546259276402534229231780532278276697961222319054833980226978574905974878218905613341365260453461080117407529132948986104191917111000811731784483944945364091757083949827612260904757837644538366763161154611658652020868326985526984718638276184626634240096213703958275241215175054246685206226179114590838833694648062135027841593419815101363262701960507235056752424778384286627997500871204804629047307688466887868894491042058198480775705486
解题脚本:
from functools import *from Crypto.Util.number import *import gmpy2n1 = 15228664629164509105936278301396170708905691970126305196584505186788860519598413718493859625462561931380632032431490419378905593909771649295663481782473029836321132574188559245931660756414915507930357509270674460219615256962333464689419869130366867401404262606367700782040693275068101244535880649261286041921882470460606034302142183971677715439862839410834231609821777031530457674591868138859358815039755085358568037032478394036448363183057305077227769673701227083943898736796552550712057417053897722979700329662099072959306298177351997084389916443815546425080826441671985030755256185725913397986385179516049927425591 n2 = 28182418532443955655250943929828439725377604572088962537896240628709829618999901367131159759359513146864646169253348651905865895468151210748207509325666501438590382812326109260537618829438786609626137074778638549998280533912080708785604673270460635181275360847313985764185991865570533815651261638439461846512012164531330949433517277559149828806588070421852157781670188281908625986974579194819272643409859915715455134433970119584552350648013116998668938513347083566970423327936691885137812528912263666957628197241313496232397910546498542303925205356813548741679943691886217742767778075067797422624969714343428365022749 n3 = 18355811159408154065817199279776805621878757240392366715869421799780946779485225342662736231980532326015283372375030686507311099745671828649419794838611580909610100636296701054995302819692794479292794716441442731393027118795245239019609474743841061251498233337758043553376098591254587406941205804917663153256036922860462415387926973551020540123742773938055950168965005226319984869124543783579240130888344231027912143592472823564266887957101575622993773291455143915263715932280728961208233983782906070719786115187115449430196335973764600533097718947377609348244073036523422892353195107093782201003551217830556519184839 e1 = 65537 e2 = 27751 e3 = 65537 c1 = 5368342382489380107251269030258282008067103595899117880173297169710980852124379736420135829984131832023988667774795223808420069001078159756328642298736759964890517323144475742861501409284299556459601222657540302786301791897975932176538612601162552795835603779910738886150925504885639254302406755008796950704938463132687940418772021406619622090999564746948113296328739593309200238996686945891130656599419832796482095787039339269564880847130379179831744694000940207887150388411084465949903406848727641093033681144598595895383689139227400553234701993087147186292040330589331703587405822925483701667354935313494938769206 c2 = 21521672635651854919517759696514027081496995002884626306313384597771682621826437868933822942195279941318573525337109548152966094293276717095298929811895186384560362917891928656637913236676702009205642367801075592458101830488916914437754803979953027152373619293870115731171449223105986403604973873007338969000153480949617700626516389419935352576014084068271819009465242491467427642787306345049280205827574043586767133396458785487959251540831856187380154825027964867977651727983254127239427622549059938701125498520279503972702883327594442747467858234391945790597844344295786118320620376681461727686876948563884520137741 c3 = 13940747781246179701167820858098775936269078279837839169409057305686612176371099274767269714494905207551971162649902129137425806839867713157472497469542260664882313041602553845621113546259276402534229231780532278276697961222319054833980226978574905974878218905613341365260453461080117407529132948986104191917111000811731784483944945364091757083949827612260904757837644538366763161154611658652020868326985526984718638276184626634240096213703958275241215175054246685206226179114590838833694648062135027841593419815101363262701960507235056752424778384286627997500871204804629047307688466887868894491042058198480775705486 p = gmpy2.gcd(n1,n2) q = gmpy2.gcd(n2,n3) def attack (p,q,e,c ): n = p * q phi = (p - 1 ) * (q - 1 ) d = gmpy2.invert(e,phi) m = long_to_bytes(pow (c,d,n)) print (m) attack(p,n1 // p,e1,c1) attack(p,n2 // p,e2,c2) attack(q,n3 // q,e3,c3)
b”hahaha, you’ve got the flag didn’t you !the front part is :flag{G00d_w4” b”hahaha, you’ve got the flag didn’t you !the middle part is :y_tO_cR” b”hahaha, you’ve got the flag didn’t you !the last part is :4ck_RS4}”
39 [LitCTF 2023]md5的破解 🚩flag:NSSCTF{md5can123dexrypt213thoughcrpsh}
💡hint:md5
from Crypto.Util.number import *from hashlib import md5from secret import flagm=md5(flag).hexdigest() print (flag[:13 ]+flag[15 :18 ]+flag[19 :34 ]+flag[35 :38 ])print (m)
解题脚本:
from Crypto.Util.number import *import stringimport hashlibdic = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_}{' for i in dic: for j in dic: for k in dic: for l in dic: s = 'LitCTF{md5can' +i+j+'3de' +k+'rypt213thoughcr' +l+'sh}' print (s) if hashlib.md5(s.encode('utf-8' )).hexdigest() == '496603d6953a15846cd7cc476f146771' : print ("Find it: " +s) exit(0 )
LitCTF{md5can123dexrypt213thoughcrpsh}
40 [WUSTCTF 2020]佛说:只能四天 🚩flag:NSSCTF{ni_hao_xiang_xiang_da_wo}
💡hint:其他
圣经分为《旧约全书》和《新约全书》
尊即寂修我劫修如婆愍闍嚤婆莊愍耨羅嚴是喼婆斯吶眾喼修迦慧迦嚩喼斯願嚤摩隸所迦摩吽即塞願修咒莊波斯訶喃壽祗僧若即亦嘇蜜迦須色喼羅囉咒諦若陀喃慧愍夷羅波若劫蜜斯哆咒塞隸蜜波哆咤慧聞亦吽念彌諸嘚嚴諦咒陀叻咤叻諦缽隸祗婆諦嚩阿兜宣囉吽色缽吶諸劫婆咤咤喼愍尊寂色缽嘚闍兜阿婆若叻般壽聞彌即念若降宣空陀壽愍嚤亦喼寂僧迦色莊壽吽哆尊僧喼喃壽嘚兜我空所吶般所即諸吽薩咤諸莊囉隸般咤色空咤亦喃亦色兜哆嘇亦隸空闍修眾哆咒婆菩迦壽薩塞宣嚩缽寂夷摩所修囉菩阿伏嘚宣嚩薩塞菩波吶波菩哆若慧愍蜜訶壽色咒兜摩缽摩諦劫諸陀即壽所波咤聞如訶摩壽宣咤彌即嚩蜜叻劫嘇缽所摩闍壽波壽劫修訶如嚩嘇囉薩色嚤薩壽修闍夷闍是壽僧劫祗蜜嚴嚩我若空伏諦念降若心吽咤隸嘚耨缽伏吽色寂喃喼吽壽夷若心眾祗喃慧嚴即聞空僧須夷嚴叻心願哆波隸塞吶心須嘇摩咤壽嘚吶夷亦心亦喃若咒壽亦壽囑囑
题目中的圣经分为《旧约全书》和《新约全书》应该是指只有新约佛伦禅才解的出来 然后出来的是社会主义核心价值观,解完以后是一串字符,根据提示得出这啥栅栏密码 在栅栏解密的穷举中找到R5UALCUVJDCGD63RQISZTBOSO54JVBORP5SAT2OEQCWY6CGEO53Z67L_doyouknowCaesar_ 得出凯撒加密,穷举结果,发现都是大写,且数字范围位2~7,应该是base32 解出wctf2020{ni_hao_xiang_xiang_da_wo}