base64.B64解码函数不能正常工作,为什么?

2024-10-01 17:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我解码了这两个字符串(见下文),但是test1和test2的结果相同,这意味着它们是相同的。为什么?b64decode函数似乎将“==”之后的字符串截断。我做错了什么?在

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


Tags: 函数字符串解码test1base64test2见下文b64decode
2条回答

在这种情况下,它的用法是“好的”。在

您认为base64decode函数将“==”后面的字符串截断的假设在某种程度上是正确的,因为base64decoder将其解释为base64字符串的结尾。在

重要的是要知道“=”字符是如何工作的,它更像是base64编码中的一个特殊字符,并且没有相应的字符来编码它。在

只是给你一个简短的概述,而不是深入到这个主题:

如果base64encode函数获取一个字符串作为输入以生成base64编码的字符串,则输入字符串的长度必须除以3。 如果不是这样,base64将自动在base64编码字符串的末尾添加填充字符“=”,以告诉base64decoder函数需要多少字节才能将输入字符串填充为可除以3的字符串,并且他可以将字符串正确解码回原始字符串。在

所以在您的情况下,base64decoder在字符串“ibfigacaiaaaa==”中看到“=”字符,并可能将其解释为base64字符串的结尾。在

结论

如果base64字符串不是3的倍数,并且不编码任何字符,则会看到“=”字符始终位于该字符串的末尾。在

看起来您正在将多个编码字符串连接在一起。编码不是这样工作的。在

在编码之前将字符串附加在一起。在

或者,如果您试图解码多个编码字符串,请在它们上循环:

encoded_strings = ["IBFIgACAAIAAAA==","Iq0yAACAMgAwMA==","NzEI9AFkZEsegA==","IHEINzdLS0sAAA=="] 

for i in encoded_strings:
    print(base64.b64decode(i))

相关问题 更多 >

    热门问题