我解码了这两个字符串(请参见下文),但是test1和test2的结果相同,这意味着它们是相同的。为什么?看来b64decode函数在“ ==”之后剪切了字符串。我该怎么办?
test1 = base64.b64decode("IBFIgACAAIAAAA==Iq0yAACAMgAwMA==NzEI9AFkZEsegA==IHEINzdLS0sAAA==")
test2 = base64.b64decode("IBFIgACAAIAAAA==")
答案 0 :(得分:1)
也许很高兴知道为什么会这样,以及在这种情况下“ =”的含义以及在base64中的用例。
您假设base64decode函数将“ ==”后面的字符串切掉是正确的,因为base64decoder会将其解释为base64字符串的结尾。
重要的是要知道“ =”字符的工作方式,并且它更像是base64编码中的特殊字符,并且没有相应的字符对其进行编码。
只是给您一个简短的概述,而不会深入本主题:
如果base64encode函数获取String作为输入以生成base64编码的String,则输入String的长度必须可被3整除。 如果不是,base64会自动在base64编码的字符串的末尾添加填充字符“ =”,以告诉base64decoder函数需要多少字节才能将输入字符串填充为3的整数,并且他可以解码该字符串正确地返回到原始字符串。
因此,在您的情况下,base64decoder会在字符串“ IBFIgACAAIAAAAAAA ==”中看到您的“ =”字符,并可能将其解释为base64字符串的结尾。
结论:
如果字符串不是3的倍数,并且它不编码任何字符,您将总是在base64字符串的末尾看到“ =”字符。
答案 1 :(得分:0)
您似乎正在将多个编码的字符串连接在一起。那不是编码的原理。
在对字符串进行编码之前将其附加在一起。
或者,如果您尝试解码多个编码的字符串,请遍历它们:
encoded_strings = ["IBFIgACAAIAAAA==","Iq0yAACAMgAwMA==","NzEI9AFkZEsegA==","IHEINzdLS0sAAA=="]
for i in encoded_strings:
print(base64.b64decode(i))