文章目录
base64stego
题目分析
题目给了一堆base64编码,解码后发现是一段关于steganography的英文介绍。换思路,题目的标题是base64stego,而steg是影写术前几个字母,可能是base64影写。可以参考这篇文章-------> base64影写
简单的说:Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),三个字符base64编码后就变成了4个字符,按照3比4的比例进行编码。
那么当要编码的字符不满足3/4这个比例的时候,在8比特转换为6比特的过程中就会在比特添加0来弥补,比如4个字符,也就是4*8=32个比特,将32个比特转换为6个比特一组,发现除不尽,少4个比特。这时候我们在末尾添加4个0来补充。这四个零在解码的时候也会被丢弃,可以发现4个零对Ibabase64编码和解码结果没有影响。
正是利用这一点,我们可以影藏信息。下面给出python脚本。
import base64
def deStego(stegoFile):
b64table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
with open(stegoFile, 'r') as stegoText:
message = ""
for line in stegoText:
try:
text = line[line.index("=") - 1:-1]
#print(text)
message += "".join([bin(0 if i == '=' else b64table.find(i))[2:].zfill(6) for i in text])[
6 - 2 * text.count('='):6]
except:
pass
return "".join([chr(int(message[i:i + 8], 2)) for i in range(0, len(message), 8)])#二进制转ascii码
print(deStego("stego.txt"))
"""
运行结果:
Base_sixty_four_point_five
"""
总结
掌握base64编码原理,了解base64影写,会编写脚本破解base64影写。