B@se-还原错误字母表转码的base64编码

题目:

密文:MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD==
JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/

oh holy shit, something is missing...

第一行是密文,有明显的Base64编码特征(等号结尾)

第二行是大小写字母、数字、+、/,有明显的Base64编码表特征,但是多了四个星号,这个可以和标准编码表对比找到缺失部分,四个星号分别代表j、u、3、4,但顺序未知。

标准编码表:

standard_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

接下来只需要将题目中的“密文”转化为使用正确编码表编码的“密文”,再转码为明文可得flag。脚本如下:

import base64
import itertools

encoded_str="MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD=="
standard_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
chars='ju34'
for comb in itertools.permutations(chars,4):
    wrong_alphabet_guess='JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs'+''.join(comb)+'kxyz012789+/'
    mapping = {wrong_alphabet_guess[i]: standard_alphabet[i] for i in range(len(wrong_alphabet_guess))}
    corrected_str = ''.join(mapping.get(c, c) for c in encoded_str)
    decoded_bytes = base64.b64decode(corrected_str)

    print(decoded_bytes)

找到最像的一个

posted @ 2025-01-13 11:02  Draina  阅读(54)  评论(0)    收藏  举报