我想要编码32字节的二进制数据。它将放在一个URL中,因此URL更安全。显然,选择的典型编码是十六进制。这会产生64个字符的字符串。
我花了很多时间查看各种编码,并且想知道,在找不到之后,是否有一些编码可以产生少于64个字符的输出但没有填充(只是对于URL清洁度,我宁愿没有填充)。一个有效的选项可能类似于Base 64的版本,它在解码回二进制时自动确定是否需要填充。
似乎Base 64应该能够确定没有“=”字符存在的正确填充量是什么,因为您可以在基本64字符串的末尾添加任意数量的“=”符号并且它将始终成功解码(至少使用Python的base64.b64decode()
)。我可以手动剥离并重新添加填充到基本64位编码的字符串,但对于我的用例,这将是很多额外的字符串操作。
答案 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'