base64文件隱寫腳本
base64 可以在文件中隱藏信息,記錄一下提取腳本
'''
base64文件隱寫腳本
import re
import base64
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
stego.txt為待解密的base64隱寫字符串所在的文件
f = open('C:\Users\XXX\Desktop\stego.txt','r')
base64str = f.readline()
pattern2用於匹配兩個等號情況時,等號前的一個字符
pattern2用於匹配一個等號情況時,等號前的一個字符
pattern2 = r'(\S)==$'
pattern1 = r'(\S)=$'
提取后的隱寫二進制字符加入binstring中
binstring = ''
逐行讀取待解密的base64隱寫字符串,逐行處理
while(base64str):
# 先匹配兩個等號的情況,如果匹配不上,再配置一個等號的情況
# 如果無等號,則沒有隱藏,無需處理
if re.compile(pattern2).findall(base64str):
# mstr為等號前的一個字符,該字符為隱寫二進制信息所在的字符
mstr = re.compile(pattern2).findall(base64str)[0]
# 確認mstr字符對應的base64二進制數,賦值給mbin
mbin = bin(b64chars.find(mstr))
# mbin格式如0b100,mbin[0:2]為0b
# mbin[2:].zfill(6)為將0b后面的二進制數前面補0,使0b后面的長度為6
mbin2 = mbin[0:2] + mbin[2:].zfill(6)
# 兩個等號情況隱寫了4位二進制數,所以提取mbin2的后4bit
# 賦值給stegobin,這就是隱藏的二進制信息
stegobin = mbin2[-4:]
binstring += stegobin
elif re.compile(pattern1).findall(base64str):
mstr = re.compile(pattern1).findall(base64str)[0]
mbin = bin(b64chars.find(mstr))
mbin2 = mbin[0:2] + mbin[2:].zfill(6)
# 一個等號情況隱寫了2位二進制數,所以提取mbin2的后2bit
stegobin = mbin2[-2:]
binstring += stegobin
base64str = f.readline()
stegobin將各行隱藏的二進制字符拼接在一起
從第0位開始,8bit、8bit處理,所以range的步進為8
for i in range(0,len(binstring),8):
# int(xxx,2),將二進制字符串轉換為10進制的整數,再用chr()轉為字符
print(chr(int(binstring[i:i+8],2)),end='')
'''