強網杯2017Crypto-level1

拿到文件發(fā)現是明文-密文對,密文是base64加密過的。
對其中一條密文進行base64解密之后發(fā)現是亂碼,猜測應該是在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ā)現存在下面的替換關系:
明文:{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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容