base64.b64decode函数无法正常运行,为什么?

时间:2019-05-08 14:31:26

标签: python base64 decode

我解码了这两个字符串(请参见下文),但是test1和test2的结果相同,这意味着它们是相同的。为什么?看来b64decode函数在“ ==”之后剪切了字符串。我该怎么办?

test1 = base64.b64decode("IBFIgACAAIAAAA==Iq0yAACAMgAwMA==NzEI9AFkZEsegA==IHEINzdLS0sAAA==") test2 = base64.b64decode("IBFIgACAAIAAAA==")

2 个答案:

答案 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))