coming
天行健 君子以自强不息
记录我的成长
题目信息
附件是一个文本文件,里面有658行base64编码。
分析
先将附件中每行base64编码进行解码,得到一个Python脚本。但其实信息并非隐藏在解码后的数据中,而是隐藏在编码中。首先介绍base64编码的原理,当需要编码的数据剩下1或2字节时,编码与解码过程如下:
可以看到,即使$a_{i} \neq 0$,解码过程也能正确进行;从而可以使用$a_{i}$传递一些信息。因此,只要我们将编码中的$a_{i}$提取出来,就可以解出flag。
解题
实现的Python脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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()
|
程序运行结果如下:
1 2
| $ python solve.py ROIS{base_GA_caN_b3_d1ffeR3nT}
|
本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!