攻防世界-密码学-Decode_The_File

1. 题目信息

附件是一个文本文件,里面有658行base64编码。

2. 分析

先将附件中每行base64编码进行解码,得到一个Python脚本。但其实信息并非隐藏在解码后的数据中,而是隐藏在编码中。首先介绍base64编码的原理,当需要编码的数据剩下1或2字节时,编码与解码过程如下:

可以看到,即使\(a_{i} \neq 0\),解码过程也能正确进行;从而可以使用\(a_{i}\)传递一些信息。因此,只要我们将编码中的\(a_{i}\)提取出来,就可以解出flag。

3. 解题

实现的Python脚本如下:

from base64 import b64decode
from string import uppercase,lowercase,digits
from Crypto.Util.number import long_to_bytes

def solve():
    with open('encode','r') as f:
        codes=f.read()
    Lc=codes.split('\n')[:-1]
    base=uppercase+lowercase+digits+'+/'
    re2=[]
    for code in Lc:
        if '==' in code:
            re2.append(bin(base.find(code[-3]))[2:].rjust(6,'0')[2:])
        elif '=' in code:
            re2.append(bin(base.find(code[-2]))[2:].rjust(6,'0')[4:])
    ret=''.join(re2)
    return long_to_bytes(long(ret[:ret.rfind('1')+1],2))

if __name__=='__main__':
    print solve()

程序运行结果如下:

$ python solve.py
ROIS{base_GA_caN_b3_d1ffeR3nT}
posted @ 2020-08-21 21:27  _Mind  阅读(773)  评论(0编辑  收藏  举报