Skip to main content
 首页 » 编程设计

python之Base64解码直到没有Base64

2025年05月04日14wayfarer

所以我认为我的问题非常简单。我需要解码 Base64 直到没有 Base64,我检查 RegEx 是否有一些 Base64 但我不知道如何解码直到没有 Base64。

在这段简短的代码中,我可以解码 Base64,直到没有 Base64,因为我的文本已定义。 (直到 Base64 Decode Stuff 不是“Hello World”解码)

# Import Libraries 
from base64 import * 
import re 
 
# Text & Base64 String 
strText = "Hello World" 
strEncode = "VmxSQ2ExWXlUWGxUYTJoUVVqSlNXRlJYY0hOT1ZteHlXa1pLVVZWWE9EbERaejA5Q2c9PQo=".encode("utf-8") 
 
# Decode 
objRgx = re.search('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$', strEncode.decode("utf-8")) 
 
strDecode = b64decode(objRgx.group(0).encode("utf-8")) 
 
print(strDecode.decode("utf-8")) 
 
while strDecode != strText.encode("utf-8"): 
    strDecode = b64decode(strDecode) 
 
    print(strDecode.decode("utf-8")) 

有没有人知道我如何解码 Base64 直到有真正的文本(不再有 base64)

P. S. 抱歉我的英语不好。

请您参考如下方法:

你不能,不是在任意意义上。问题很简单,很正常,每天的话也可以是BASE64。因此,没有真正的方法可以区分两者。

除了长度之外,BASE64 没有终止符。它可以用 = 或 == 终止,但不必终止。 = 只是填充。不需要填充,那么就没有=。因此,可能 BASE64 将结束并开始一些文本,而您无法检测到它。

编辑“所以真的没有办法做我想做的事吗?”:

不,不确定,不可靠。即使使用启发式算法,也可能会出现失败的情况,并且您最终会消耗过多的字符,从而导致二进制 block 末尾出现垃圾,并在随后的文本流中丢失字符。

现在这是针对任意 BASE64 block 的。如果您知道二进制数据是什么,那么也许就有希望了。

例如,如果您知道二进制数据是什么,那么大多数二进制格式在“完成”时“知道”。我不知道有一种有效的二进制格式表示“读取直到到达 EOF”。它们通常带有“这是下一个 block 有多少数据”的内部描述符,或者带有表示“我完成了”的终止符。

在这些情况下,您可以将 BASE64 视为流。 BASE64 基本上非常简单。它占用 3 个字节并将它们转换为 4 个字符。

因此,B64 流读取器需要简单地读取 4 个字符并返回它们代表的 3 个字节。

如果您有一个 PNG 阅读器,它可以开始阅读转换后的流。当它“完成”时,它“关闭”流,您的原始文本“在 BASE64 的末尾”。

如果您知道原始附件的大小,它也可以工作。如果有人发送了“10,000 个字节”,那么您可以使用 BASE64 流解码器并简单地从中读取“10,000”个字节。

通常情况下,您会使用带有 = 或 == 终止符的 BASE64。在您不这样做的情况下,这是一个问题。解码后的流以任何一种方式工作。

如果您不知道附件的原始大小或编码二进制文件的格式,那么您就很不走运了。