将任意字符串编码和解码为可安全放入url查询参数的字符串。
querystringsafe-base64的Python项目详细描述
查询字符串安全基64
将任意字符串编码和解码为可安全放入url查询参数的字符串。
问题
urlsafe_b64encode和urlsafe_b64decode来自base64是不够的,因为它们将=用于填充未引用的字符:
importbase64base64.urlsafe_b64encode('a')'YQ=='
有两个问题
- =符号被引用:
importurlliburllib.quote('=')'%3D'
- 有些库允许查询字符串值中的=:
fromurlparseimporturlsplit,parse_qsparse_qs(urlsplit('http://aaa.com/asa?q=AAAA=BBBB=CCCC').query){'q':['AAAA=BBBB=CCCC']}
但是rfc 3986没有指定查询字符串,因此我们不能像urlparse那样依赖所有web应用程序处理的=字符。
因此,我们认为字符:['+','/','=']不安全,我们用['-','\','.'.]替换它们。 字符+和/已经由base64中的urlsafe\u*函数处理,因此只剩下=。 由于=只用于填充,我们只需删除它,然后在解码期间重新附加填充。 因此,querystringsafe_base64能够解码填充和未添加的字符串。
解决方案
importquerystringsafe_base64querystringsafe_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
- 支持python3
0.1.5
- 将QueryStringSafe_Base64模块移到根目录
- 在测试期间使用install而不是development
0.1.4
- 从分配器上拆下b列表轮
0.1.3
- 安装pandoc(travis)
0.1.2
- 将setup.cfg和pypandoc添加到测试中
0.1.1
- 添加manifest.in文件
0.1.0
- 包装结构
- 测试