32字节数据的最短编码

时间:2013-09-04 23:11:26

标签: python encoding hash hex base64

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

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

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

1 个答案:

答案 0 :(得分: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'