拿到文件發(fā)現(xiàn)是明文-密文對诫睬,密文是base64加密過的窑多。
對其中一條密文進行base64解密之后發(fā)現(xiàn)是亂碼鞋邑,猜測應該是在Base64加密之前進行了另一次加密:
image.png
猜測題目應該是讓我們找到密鑰低剔,通過密鑰解密password.enc文件的密文。
要通過密鑰的加密首先想到異或籍茧,猜測密文是由明文與密鑰異或后再進行base64加密得出的,不妨隨機選擇一條密文版述,進行base64解密之后與對應明文異或,得出密鑰寞冯,然后再用密鑰把密文用同樣的方式還原成明文:
from base64 import b64decode
from Crypto.Util.strxor import strxor
cknown = "IB8hBnIHFQkRBAERABwFCDsPe0AadDEZJVkIbWMyFzo="
mknown = "jYj0ApA8korwFrDKhkBsyAfcklX81hYr"
key = strxor(b64decode(cknown),mknown)
with open("password.enc","r") as f:
print strxor(b64decode(f.read()),key)
image.png
解開壓縮包渴析,得到另一組明文-密文對,發(fā)現(xiàn)存在下面的替換關(guān)系:
明文:{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789}
密文:XmQavYuUbsgqAnpZVoCySjrJORBlGTEhPWLNftwciHMDzxFIdKek}{6470513298
通過替換還原壓縮包中的password.enc
import string
def decrypt_data(ctext):
orig = '{' + string.letters + string.digits + '}'
cipher = "XmQavYuUbsgqAnpZVoCySjrJORBlGTEhPWLNftwciHMDzxFIdKek}{6470513298"
transl = string.maketrans(cipher,orig)
result = ctext.translate(transl)
print result
with open('flag.enc','r') as f:
decrypt_data(f.read())
image.png