Python base64 解码,不同的字符串解码出来的内容一致

2018-09-11 12:09:23 +08:00
 superbai

python2.7 环境,调用 base64.b64decode()方法进行解析,下面两个字符串(区别在于字符串开始有没有下划线)解析出来的内容一致,求教这是怎么回事....

result1 = base64.b64decode('_Y62pWdlMDnkQMUYjYOUkVQ==')
result2 = base64.b64decode('Y62pWdlMDnkQMUYjYOUkVQ==')
result = result1 == result2    # result: True
4481 次点击
所在节点    Python
9 条回复
binux
2018-09-11 12:13:33 +08:00
下划线又不是 64 个字符集里的,就给忽略了吧
itskingname
2018-09-11 12:15:34 +08:00
我用 macOS 的命令解压出来是不一样的。

```
$ echo "_Y62pWdlMDnkQMUYjYOUkVQ==" | base64 --decode
�ge09�@�����T%
$ echo "Y62pWdlMDnkQMUYjYOUkVQ==" | base64 --decode
c��Y�Ly1F#`�$U%
```
itskingname
2018-09-11 12:18:33 +08:00
base64 的 64 是指 10 个数字 + 26 个小写字母 + 26 个大写字母 + 斜杠 + 加号 再附加一个等号作为凑数的符号。一个 64 个有效符合加 1 个凑数符号。所以是没有下划线的。
dacapoday
2018-09-11 13:16:44 +08:00
@itskingname ubuntu 下,同样命令,含下划线的直接报错:base64: invalid input
virusdefender
2018-09-11 14:30:29 +08:00
一楼正解,下划线给忽略了
annielong
2018-09-11 14:58:30 +08:00
标准 base64 没有下划线和问号,因为这个 url 里面传 base64 踩了大坑,
JHerschel
2018-09-11 16:40:08 +08:00
https://github.com/python/cpython/blob/master/Modules/binascii.c

468 - 470 行。

如果 ascii 字符大于 0x7f 的话,就忽略它了。
JHerschel
2018-09-11 17:11:16 +08:00
@JHerschel 或者在 table_a2b_base64[] 里面位置为 -1 的。
crab
2018-09-11 17:22:24 +08:00
@annielong 下划线还是的。base64url 下 +/替换-_

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/488153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX