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)
找到最像的一个
本文作者:Draina
本文链接:https://www.cnblogs.com/Draina/p/18668219
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
合集:
BUUCTF密码学
分类:
密码学 / BUUCTF密码学
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步