跳转到主要内容

将任意字符串编码和解码为可以安全放入URL查询参数的字符串。

项目描述

Tests Coverage Status

查询字符串安全的Base64

将任意字符串编码和解码为可以安全放入URL查询参数的字符串。

问题

urlsafe_b64encodeurlsafe_b64decode从base64不够,因为它们没有对填充字符=进行引号处理

import base64

base64.urlsafe_b64encode('a')
'YQ=='

这有两个问题

  1. =符号被引号包围

import urllib

urllib.quote('=')
'%3D'
  1. 某些库容忍查询字符串值中的=

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 (7.2 kB 查看哈希值)

上传时间 Python 2 Python 3