2018西安工業大學第二屆萌新線上賽密碼學 WP
本次WP,由雒大佬提供!
0x1 base16
直接轉字串
flag{it_is_b4s3sixteen}
0x2 base32
直接base32
0x3 base64
直接base64解碼
0x4 unicode
直接轉字串
0x5 easy_caesar
凱撒解密
得到flag
0x6 奇怪的字串
R1kzRE1RWldHRTNET04yQ0dNNERHTkpUR0laVFFNWlRHTVpUTU5KV0dFWlRPTlJUR00zVEdOSlRHNDNETU5SUkdNWlRHTkpXR01aVElOUldHTVlER01KVEhBM0RNTlJSR1lZVE1NWlRHWVpUT05SUkdNWVRHTVpYSVE
先拿base64解密
提示失敗,在字串後面加上=
得到結果
嘗試再次進行base64解碼
提示失敗,再次加=
很明顯不是我們想要的
嘗試base32
得到一個十六進位制
轉字串
得到flag
0x7 easy_rsa1
前面轉了那麼多十六進位制到字串
密文一看就知道轉字元有flag
這道題 如果沒發現特點,可以按rsa常規的套路去做,n裡面出現了非十六進位制數
說明n在這裡肯定用不了
但是給出e=1,rsa加密中 如果e=1 c=m mod n,假如m 與 n 互質,c=m
0x8 easy_rsa0
n = 14783703403657671882600600446061886156235531325852194800287001788765221084107631153330658325830443132164971084137462046607458019775851952933254941568056899 e = 65537 c = 1185049716299203720803420810904079629528218564331492627830830396094648931160053948162527867338891026371024154472597960669760006765402877890901585728358989
常規題目,嘗試分解n
在factordb上查詢 沒有得到結果
用yafu進行分解
分解成功得到 p和q
然後通過p、q、e破解出 d
import gmpy from Crypto.PublicKey import RSA n = 14783703403657671882600600446061886156235531325852194800287001788765221084107631153330658325830443132164971084137462046607458019775851952933254941568056899 c = 1185049716299203720803420810904079629528218564331492627830830396094648931160053948162527867338891026371024154472597960669760006765402877890901585728358989 e = long(65537) p = 121588253559534573498320028934517990374721243335397811413129137253981502291631 q = 121588253559534573498320028934517990374721243335397811413129137253981502291629 d = long(gmpy.invert(e,(p-1)*(q-1))) key = RSA.construct((n,e,d)) print key print key.decrypt(c) print hex(key.decrypt(c)) print hex(key.decrypt(c))[2:-1].decode('hex')
然後直接利用私鑰解密
得到明文 不過明文是十進位制 需要轉成字串
最後得到flag{rsa_1s_s0_interesting}
0x9 cipher
給出的是一串十六進位制
我們將其轉成字串得到
看著很懵逼,對其進行分析,發現有很多字串重複,於是將其在百度上搜索
替換與置換密碼
對其進行凱撒解密
發現關鍵詞 cipher 通過分析得知 該字串是通過凱撒加密且位移位3後的字串
將其全文進行凱撒解密得到
出現了很多正常的英文單詞
且其中出現了rot46,於是百度搜索
並沒有關於rot46的資訊,但是看到rot47
於是自己寫rot46的指令碼
得到的結果依然不對
後面分析rot47
說是對ascii值進行置換
於是嘗試和對全文進行位移為3的ascii置換
s="4c712366757c7377726a7564736b7c2f23642346646876647523666c736b68752f23646f7672236e71727a71236476234664687664752a7623666c736b68752f23776b6823766b6c697723666c736b68752f234664687664752a7623667267682372752346646876647523766b6c69772f236c762372716823726923776b6823766c70736f687677236471672370727677237a6c67686f7c236e71727a7123687166757c73776c7271237768666b716c7478687631234c77236c76236423777c73682372692376786576776c7778776c727123666c736b6875236c71237a6b6c666b236864666b236f6877776875236c7123776b6823736f646c7177687b77236c76237568736f6466686723657c2364236f6877776875237672706823696c7b686723717870656875237269237372766c776c7271762367727a7123776b6823646f736b64656877312349727523687b6470736f682f237a6c776b2364236f68697723766b6c697723726923362f2347237a72786f67236568237568736f6466686723657c23442f2348237a72786f672365686672706823452f236471672376722372713123576b68237068776b7267236c76237164706867236469776875234d786f6c7876234664687664752f237a6b722378766867236c77236c71236b6c762373756c7964776823667275756876737271676871666831100d576b6823687166757c73776c727123767768732373687569727570686723657c23642346646876647523666c736b6875236c76237269776871236c71667275737275647768672364762373647577237269237072756823667270736f687b2376666b687068762f237678666b23647623776b6823596c6a6871c6ab756823666c736b68752f236471672376776c6f6f236b647623707267687571236473736f6c6664776c7271236c7123776b6823555257343623767c7677687031234476237a6c776b23646f6f23766c716a6f6830646f736b646568772376786576776c7778776c727123666c736b6875762f23776b682346646876647523666c736b6875236c76236864766c6f7c236575726e687123647167236c71237072676875712373756466776c666823726969687576236876766871776c646f6f7c237172236672707078716c6664776c72712376686678756c777c3123100d5d707b6b5d36776d5c5a596d5c5b4d69645b51695d5a497d685b3340"
result=""
i=0
while i < len(s):
result+=chr(int(s[i:i+2],16)-3)
i+=2
print result
得到結果
前兩段話是摘自wiki上關於凱撒加密的介紹
最後一句就是flag了
直接base64解碼
熟悉的flag味道
轉字串
flag{caecar_is_easy}
0x10 總結
這次的密碼題簡單的非常簡單,難的難在腦洞,真正的技術難題感覺並沒有。