攻防世界-密码学-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}