拿到文件发现是明文-密文对,密文是base64加密过的。
对其中一条密文进行base64解密之后发现是乱码,猜测应该是在Base64加密之前进行了另一次加密:
猜测题目应该是让我们找到密钥,通过密钥解密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)
解开压缩包,得到另一组明文-密文对,发现存在下面的替换关系:
明文:{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())