[NCTF2019]Reverse
[NCTF2019]Reverse
題目
汮S賳!Ⅳ?Z_l,?漋& hDa蕕&5匼?oZ€|U€骸%#}巴 import os import pyDesflag = "NCTF{******************************************}" key = os.urandom(8)d = pyDes.des(key) cipher = d.encrypt(flag.encode())with open('cipher', 'wb') as f:f.write(cipher)# Leak: d.Kn[10] == [0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1]解題
讀程序
pyDes模塊:
pyDes.des(key, [mode], [IV], [pad], [padmode])
pyDes.triple_des(key, [mode], [IV], [pad], [padmode])
key->包含加密密鑰的字節(jié)。DES為8字節(jié),16或24字節(jié)
三重DES
mode -> 加密類型的可選參數(shù),可以是pyDes.ECB(電子碼本)或pyDes.CBC(密碼區(qū)塊鏈)
IV -> 可選初始值字節(jié),如果使用CBC模式,則必須提供。長(zhǎng)度必須為8字節(jié)。
pad -> Optional參數(shù),將pad字符(pad\u NORMAL)設(shè)置為在使用此實(shí)例完成的所有加密/解密操作。
padmode -> 可選參數(shù),設(shè)置填充模式(PAD_NORMAL或PAD_PKCS5)在對(duì)此實(shí)例執(zhí)行的所有加密/解密操作期間使用。
encrypt(data, [pad], [padmode])
decrypt(data, [pad], [padmode])
data -> 要加密/解密的字節(jié)
pad -> 可選參數(shù)。僅當(dāng)使用PAD_NORMAL的padmode時(shí)。對(duì)于加密時(shí),將此字符添加到數(shù)據(jù)塊的末尾數(shù)據(jù)不是8字節(jié)的倍數(shù)。對(duì)于解密,將刪除最后8個(gè)字符中與此填充字符匹配的尾隨字符未加密數(shù)據(jù)塊的字節(jié)數(shù)。
padmode -> 可選參數(shù),設(shè)置填充模式,必須是PAD\u NORMAL之一或PAD_PKCS5)。默認(rèn)為PAD_NORMAL
os.urandom(n)返回一個(gè)有n個(gè)byte那么長(zhǎng)的一個(gè)string,然后很適合用于加密。
每輪循環(huán)左移的位數(shù)不一定相同
泄露的d.Kn[10] 說(shuō)明已經(jīng)進(jìn)行了11輪了(每一輪生成一個(gè)子密鑰),因此要做sum(movnum[:11])次逆運(yùn)算
參考
答案
flag{1t_7urn3d_0u7_7h47_u_2_g00d_@_r3v3rs3_1snt}
總結(jié)
以上是生活随笔為你收集整理的[NCTF2019]Reverse的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021-07-29
- 下一篇: [羊城杯 2020]RRRRRRRSA