1

我有 32 字节的二进制数据要编码。它将被放在一个 URL 中,因此 URL 安全的东西更可取。显然,选择的典型编码是十六进制。这将产生一个 64 个字符的字符串。

我花了很多时间查看各种编码,并想知道,在未能找到之后,是否有一些编码可以产生少于 64 个字符但没有填充的输出(只是为了 URL 清洁,我宁愿没有填充)。一个有效的选项是类似于 Base 64 的版本,它在解码回二进制时自动确定是否需要填充。

似乎 Base 64 应该能够确定没有“=”字符的正确填充量是多少,因为您可以在 base 64 字符串的末尾添加任意数量的“=”符号,并且它总是会解码成功(至少使用 Python 的base64.b64decode())。我可以手动剥离并重新添加填充到 base 64 编码字符串,但对于我的用例,这将是很多额外的字符串操作。

4

1 回答 1

2

包括电池。

>>> import base64
>>> b64decode_autopadded = lambda b: base64.urlsafe_b64decode(b + '=='[:3 - len(b)%3])
>>> base64.urlsafe_b64encode("somedatastring\0\1").rstrip('=')
'c29tZWRhdGFzdHJpbmcAAQ'
>>> b64decode_autopadded("c29tZWRhdGFzdHJpbmcAAQ")
'somedatastring\x00\x01'
于 2013-09-04T23:33:03.753 回答