實驗吧密碼學WriteUp(一)
這個系列的文章會將簡單的題目放在一起介紹,稍難的題目會單獨拿出來寫,現在開始。
1.js(題目連線:http://www.shiyanbar.com/ctf/1779)
開啟網頁檢視原始碼,複製原始碼至Chrome的console,將程式碼中的eval改為console.log,回車後顯示
一看就知道是unicode編碼,找網站線上解碼即可
2.NSCTF crypto200(連線:http://www.shiyanbar.com/ctf/1768)
儲存圖片至本地,使用stegsolve開啟
變換後得到
很像二維碼是吧?不過這個二維碼的黑白顏色完全相反,是掃不出來的,可以使用光影魔術手或者其他軟體的反色功能,得到如下二維碼,然後掃描即可得到flag
3.NSCTF crypto50(連結:http://www.shiyanbar.com/ctf/1758)
題目做多了就有感覺了一看就知道是AES加密,故線上AES解密
得
直接提交,答案錯誤
仔細觀察,感覺可能用了凱撒移位
前5個字母按照flag的規律應是NSCTF,由此得到移位數
手工破解即可flag{NSCTF_Rot_EnCryption}
4.黑客叔叔(雨襲團)內部交流題(第一季1.0.2)(題目連結:http://www.shiyanbar.com/ctf/1744)
先將字元放在同一行,因為編碼裡很少會出現漢字,故嘗試將“等等”變化為”==”,漢字變化為“/”
使用TripleDes解密
接著Rabbit解密
(我也不知道為什麼是這兩個演算法,多嘗試幾次看答案像的就是了,常見加密演算法有AES DES RC4 Rabbit TripleDes 等等)
5.simple algorithm(題目連結:http://www.shiyanbar.com/ctf/737)
題目給了一個py指令碼和一個密文檔案,閱讀原始碼可知:py指令碼將明文轉換為密文,現在需要將密文檔案中的密文解密得到明文。 很明顯加密流程為將明文轉換為16進位制編碼,在轉化為10進位制數,將每兩位數字構成的數進行FAN函式運算,再拼接起來得到密文。
因此解密流程為:將0~99利用FAN函式求得加密值,建立加密值到原數的字典,在明文中查字典拼接得到10進位制數,轉化為16進位制數,再求取字串。
按照要求用python指令碼跑即可
-- coding: utf8 --
原始碼中的FAN()
def FAN(n, m):
i = 0
z = []
s = 0
while n > 0:
if n % 2 != 0:
z.append(2 - (n % 4))
else:
z.append(0)
n = (n - z[i])/2
i = i + 1
z = z[::-1]
l = len(z)
for i in range(0, l):
s += z[i] * m ** (l - 1 - i)
return s
def foo():
#讀取密文
s=open(“enc.txt”).read().strip()
#構造0~99對應的FAN()的值的字典
dct={}
for n in xrange(0,100):
#key為FAN()的結果,value為n(位數補足到2位)
dct[str((FAN(n,m=3)))]="%02d"%n
lst=[]
offset=0
while offset<len(s):
#先從4個字元匹配直至1個字元
for i in xrange(4,0,-1):
tmp=s[offset:offset+i]
if tmp in dct:
lst.append(dct[tmp])
offset+=i
break
flag="".join(lst)
#python中s[i:i+2]不一定取到2個字元,
#如s="pcat",s[3:4]和s[3:5],甚至s[3:100]都是"t"
#此題中最後得到"09",但也可能是"9",故做下面的判斷
if len(hex(long(flag))[2:-1])%2!=0:
flag=flag[:-2]+flag[-1]
flag=hex(long(flag))[2:-1].decode('hex')
print flag
pass
if name == ‘main‘:
foo()
print ‘ok’
flag:SIS{a9ab115c488a311896dac4e8bc20a6d7}
10.最近聽說劉翔離婚了(連結:http://www.shiyanbar.com/ctf/38)
柵欄密碼
其實寫多了,套路就知道了
肯定是keyis{simplexue}