使用 Python2 与 Python3 进行 Base64 URL 解码
Base64 URL decode using Python2 vs Python3
我正在尝试对十六进制字符串进行 base64 url 解码。但是,我无法使用 Python3.
正确解码字符串
十六进制字符串为 614756736247395862334a735a41
,对应的 ASCII 为“aGVsbG9Xb3JsZA”。解码后的字符串应该是helloWorld
.
我的密码是
str_encoded = "614756736247395862334a735a41"
byte_encoded = binascii.unhexlify(str_encoded)
print(base64.urlsafe_b64decode(str(byte_encoded) + '=' * (4 - len(str(byte_encoded)))))
print(base64.urlsafe_b64decode("aGVsbG9Xb3JsZA=="))
如果我运行上面的Python2,我得到正确的解码字符串helloWorld
。但是如果我 运行 和 Python3,第一个 print
给出了错误的结果。
为什么会有差异,我应该在 Python3 中使用什么替代 binascii.unhexlify()
?
区别在于unhexlify()
在python2returns一个str
对象,而python3的-bytes
,因为python2没有这样的class。
当您 运行 str()
在 Python 3 中的字节对象上运行时,您只会得到该对象的 repr()
,因此 str(byte_encoded)
in Python 3 returns b"........"
,如果你想让它在两个版本中都是 运行 我建议你把 str(byte_encoded)
变成 byte_encoded
并解码 byte_encoded
变量,如果它是 Python3,所以它会是这样的:
str_encoded = "614756736247395862334a735a41"
byte_encoded = binascii.unhexlify(str_encoded)
try:
byte_encoded = byte_encoded.decode()
except:
pass
print(base64.urlsafe_b64decode(byte_encoded + '=' * (4 - len(str(byte_encoded)))))
print(base64.urlsafe_b64decode("aGVsbG9Xb3JsZA=="))
我正在尝试对十六进制字符串进行 base64 url 解码。但是,我无法使用 Python3.
正确解码字符串十六进制字符串为 614756736247395862334a735a41
,对应的 ASCII 为“aGVsbG9Xb3JsZA”。解码后的字符串应该是helloWorld
.
我的密码是
str_encoded = "614756736247395862334a735a41"
byte_encoded = binascii.unhexlify(str_encoded)
print(base64.urlsafe_b64decode(str(byte_encoded) + '=' * (4 - len(str(byte_encoded)))))
print(base64.urlsafe_b64decode("aGVsbG9Xb3JsZA=="))
如果我运行上面的Python2,我得到正确的解码字符串helloWorld
。但是如果我 运行 和 Python3,第一个 print
给出了错误的结果。
为什么会有差异,我应该在 Python3 中使用什么替代 binascii.unhexlify()
?
区别在于unhexlify()
在python2returns一个str
对象,而python3的-bytes
,因为python2没有这样的class。
当您 运行 str()
在 Python 3 中的字节对象上运行时,您只会得到该对象的 repr()
,因此 str(byte_encoded)
in Python 3 returns b"........"
,如果你想让它在两个版本中都是 运行 我建议你把 str(byte_encoded)
变成 byte_encoded
并解码 byte_encoded
变量,如果它是 Python3,所以它会是这样的:
str_encoded = "614756736247395862334a735a41"
byte_encoded = binascii.unhexlify(str_encoded)
try:
byte_encoded = byte_encoded.decode()
except:
pass
print(base64.urlsafe_b64decode(byte_encoded + '=' * (4 - len(str(byte_encoded)))))
print(base64.urlsafe_b64decode("aGVsbG9Xb3JsZA=="))