将任意字符串编码和解码为可以安全放入URL查询参数的字符串。
项目描述
查询字符串安全的Base64
将任意字符串编码和解码为可以安全放入URL查询参数的字符串。
问题
urlsafe_b64encode和urlsafe_b64decode从base64不够,因为它们没有对填充字符=进行引号处理
import base64
base64.urlsafe_b64encode('a')
'YQ=='
这有两个问题
=符号被引号包围
import urllib
urllib.quote('=')
'%3D'
某些库容忍查询字符串值中的=
from urlparse import urlsplit, parse_qs
parse_qs(urlsplit('http://aaa.com/asa?q=AAAA=BBBB=CCCC').query)
{'q': ['AAAA=BBBB=CCCC']}
但是RFC 3986对查询字符串的规定不明确,因此我们不能依赖所有Web应用程序像urlparse那样处理=字符。
因此,我们认为以下字符:[‘+’,‘/’,‘=’]是不安全的,我们将它们替换为:[‘-’,‘_’,‘.’]。字符+和/已经被base64的urlsafe_*函数处理,所以只剩下=。由于=仅用于填充,我们直接将其删除,并在解码过程中重新添加填充。正因为如此,querystringsafe_base64能够解码填充和不填充的字符串。
解决方案
import querystringsafe_base64
querystringsafe_base64.encode(b'foo-bar')
b'Zm9vLWJhcg'
querystringsafe_base64.decode(b'Zm9vLWJhcg..')
b'foo-bar'
querystringsafe_base64.decode(b'Zm9vLWJhcg')
b'foo-bar'
变更日志
1.2.0
从编码字符串中移除填充字符。
1.1.1
修复了打包问题。
1.1.0
始终期望字节。
添加类型注解。
1.0.0
支持在解码过程中恢复缺失的填充。
0.2.0
支持Python 3。
0.1.5
将querystringsafe_base64模块移动到根目录。
在测试期间使用install而不是develop。
0.1.4
从发行版中移除bdist_wheel。
0.1.3
安装pandoc(travis)。
0.1.2
将setup.cfg和pypandoc添加到测试中。
0.1.1
添加MANIFEST.in文件。
0.1.0
包结构
测试
项目详情
关闭
querystringsafe_base64-1.2.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 850913d05558d31a6bdb90711c3ef5ca855d8e1730bf8bc0ca2bcc1ef273c130 |
|
MD5 | a654dee762e024ca087f50939dba953d |
|
BLAKE2b-256 | be13b11c71984a9bcc59dc09ca9b487673731b79fef37422fbeeca7cc54d5d7e |