1、Base64隐写
import base64
#开始在网上找了一个将int转换为固定位数的二进制的函数,后来参考了别人的用zfill()
def int2bin(n, count=24):
return "".join([str((n >> y) & 1) for y in range(count-1, -1, -1)])
if __name__ == '__main__':
b64dict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
f = open("stego.txt",'r')
article = f.readlines()
flag_bin = ''
flag = ''
for line in article:
line = line.strip('\n')
#b64encode出来是b'***'的形式,要解码成ascii码形式
oldline = base64.b64encode(base64.b64decode(line)).decode('ascii')
e_num = line.count('=')
diff = abs(b64dict.index(oldline[len(oldline) - e_num - 1]) - b64dict.index(line[len(oldline) - e_num - 1]))
if e_num:
#这里也可以用int2bin(diff, 6)[-e_num * 2 :]
flag_bin += bin(diff)[2:].zfill(e_num * 2)
for i in range(0, len(flag_bin), 8):
flag += chr(int(flag_bin[i: i + 8], 2))
print(flag)