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

querystringsafe-base64的Python项目详细描述


TestsCoverage Status

查询字符串安全基64

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

问题

urlsafe_b64encodeurlsafe_b64decode来自base64是不够的,因为它们将=用于填充未引用的字符:

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

有两个问题

  1. =符号被引用:
importurlliburllib.quote('=')'%3D'
  1. 有些库允许查询字符串值中的=
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

  • 包装结构
  • 测试

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应用程序不是在Eclipse中运行,而是在命令行中运行   swing Java图形组件问题。似乎找不到错误   我需要键盘。close();让代码正常工作?   Springboot中的java HttpSession   抽象语法树我想添加一个语句。我试图解析它,java解析器异常被抛出。如何克服它?   java Hibernate:清理会话   具有不连续子集的java划分问题   java正则表达式查找最后一个冒号后的字符串   java从SpringShell执行OS命令   Java扫描器字符串输入   java字符串索引越界异常(charAt)   java执行器服务终止被卡住   Springockito没有继承java@ContextConfiguration   java如何为一个servlet映射多个url   java安卓获取命令的stderr   java生成类型。表:数据库中的大数字   安卓 Getter Setter返回NothingJava