base64隐写
base64原理简介

如图所示, 这是一个朴实无华的base64码表。
编码后的数据是一个字符串, 包含的字符为: A-Z,a-z,0-9,+/
共 64 个字符:26 + 26 + 10 + 1 + 1 = 64。再加上填充用的=,共65个
64 个字符需要 6 位(2^6)二进制来表示, 表示成数值为 0~63。于是,就产生了 “以六个为一组的问题”
六个一组带来的问题
这是三个字符。h、e、i。 每个字符需要用8比特表示,共有8*3=24比特,正好能被6整除(4*6=24)
于是,base64就需要有4个字符来表示他。

那,没法整除怎么办?
补0。
%3 == 2 的情况

%3 == 1 的情况

那么这些被补0的地方在解码的时候是不会被是用到的。这些被补0的位置就是我们可以进行隐写的部分。
隐写方法以及判断
隐写过程:
把我们想要隐写的文本转化为二进制数,然后找一段足够长的文本按行切分并进行Base64编码,如果出现了=符号则代表这行文本能被我们用于隐写,能隐写几位,我们就从刚才得到的二进制数开头起取几位填入。经过批量处理后,我们就能完美地将数据隐写在这一行行Base64编码文本之中了。
那么,我们如何判断Base64编码文本中是否被隐写了某些信息呢?
正常情况下,解Base64得到的文本再次Base64编码,得到的值应该是和原Base64编码一样的。如果不一样,则证明这段Base64编码文本被隐写了。
base64隐写脚本
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 
 | import base64
 def Base64Stego_Decrypt(LineList):
 Base64Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
 BinaryText = ""
 for line in LineList:
 if line.find("==") > 0:
 temp = bin(Base64Char.find(line[-3]) & 15)[2:]
 BinaryText = BinaryText+"0"*(4-len(temp))+temp
 elif line.find("=") > 0:
 temp = bin(Base64Char.find(line[-2]) & 3)[2:]
 BinaryText = BinaryText+"0"*(2-len(temp))+temp
 Text = ""
 if(len(BinaryText) % 8 != 0):
 print("警告:二进制文本位数有误,将进行不完整解析。")
 for i in range(0, len(BinaryText), 8):
 if(i+8 > len(BinaryText)):
 Text = Text+"-"+BinaryText[i:]
 return Text
 else:
 Text = Text+chr(int(BinaryText[i:i+8], 2))
 else:
 for i in range(0, len(BinaryText), 8):
 Text = Text+chr(int(BinaryText[i:i+8], 2))
 return Text
 
 def Base64_ForString_Decrypt(Text):
 try:
 DecryptedText = str(Text).encode("utf-8")
 DecryptedText = base64.b64decode(DecryptedText)
 DecryptedText = DecryptedText.decode("utf-8")
 except:
 return 0
 return DecryptedText
 
 if __name__ == "__main__":
 Course = input("文件名:")
 File = open(Course, "r")
 LineList = File.read().splitlines()
 print("显式内容为:")
 for line in LineList:
 print(Base64_ForString_Decrypt(line),end="")
 print("隐写内容为:")
 print(Base64Stego_Decrypt(LineList))
 
 |