python3 base64 url docode 报错: binascii.Error: Incorrect padding
使用golang 对url进行base64 编码,然后用python3 代码对编码结果进行解码,python 代码抛出一下异常, 经过分析和查询文档得知,由于base64编码结果必须是4的整数倍,缺少的字符可以用"="填充,最少填充一个,最多填充三个即可,填充方法:s += b’=’ * (-len(s)%4)
1. 错误信息
Traceback (most recent call last):
File “d:/GitCode/AutoTest/tools/download.py”, line 69, in
upload_url = get_upload_url()
File “d:/GitCode/AutoTest/tools/download.py”, line 27, in get_upload_url
return url_decode(reponse[“data”])
File “d:/GitCode/AutoTest/tools/download.py”, line 12, in url_decode
return base64.urlsafe_b64decode(data).decode(“utf-8”)
File “C:\Python\Python38\lib\base64.py”, line 133, in urlsafe_b64decode
return b64decode(s)
File “C:\Python\Python38\lib\base64.py”, line 87, in b64decode
return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
2. golang 代码
import (
"encoding/base64"
"fmt"
)
func main() {
uri := []byte("http://127.0.0.1:9000/api/project/s")
// 对url进行base64编码
encuri := base64.RawURLEncoding.EncodeToString([]byte(uri))
fmt.Println(encuri)//aHR0cDovLzEyNy4wLjAuMTo5MDAwL2FwaS9wcm9qZWN0L3M
}
3. python 代码
#-*- coding:utf-8 -*-
import base64
s = b'''aHR0cDovLzEyNy4wLjAuMTo5MDAwL2FwaS9wcm9qZWN0L3M'''
print(len(s))#47
#填充 "=" , 使被解码串为4的整数倍
s += b'=' * (-len(s)%4)
print(len(s))#47
print(base64.urlsafe_b64decode(s).decode("utf-8"))# http://127.0.0.1:9000/api/project/s

本文档描述了在使用Python3解码由Golang进行Base64 URL编码的数据时遇到的'Incorrect padding'错误。问题源于Base64编码字符串必须是4的整数倍,而Go与Python处理填充方式不同。解决方案是在Python端对不足4的整数倍的编码字符串添加等比例的'='进行填充。通过示例代码展示了如何在Python中正确解码Golang编码的Base64 URL字符串。
938

被折叠的 条评论
为什么被折叠?



