强网杯2017Crypto-level1

拿到文件发现是明文-密文对,密文是base64加密过的。
对其中一条密文进行base64解密之后发现是乱码,猜测应该是在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

解开压缩包,得到另一组明文-密文对,发现存在下面的替换关系:
明文:{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

你可能感兴趣的:(强网杯2017Crypto-level1)