【发布时间】:2012-02-19 16:21:34
【问题描述】:
我有一个字符串,我将其编码为 base64 以节省空间。如果我删除最后的等号,这有什么大不了的吗?这会显着降低熵吗?如何确保生成的字符串的长度是固定的?
>>> base64.b64encode(combined.digest(), altchars="AB")
'PeFC3irNFx8fuzwjAzAfEAup9cz6xujsf2gAIH2GdUM='
谢谢。
【问题讨论】:
-
我有一个字符串,我将其编码为 base64 以节省空间 - Base64 不节省空间,相反。它通常用于在(通常基于 ascii 的)线路协议中表示任意字节序列。
-
只有我对“我正在编码为 base64 以节省空间的字符串”感到惊讶吗? Base64 比一般字符串更冗长,更常见的用途是将 BINARY 数据作为字符串传输。
-
另外,请不要像很多人认为的那样认为 Base64 是加密。
-
@MattH 与十六进制相比,它可以节省空间。
-
你不应该使用
AB作为altchars...base64使用A-Za-z0-9来表示6位值0-61,altchars选择用于62和63的值。使用已经分配给值的东西会导致解码错误......例如b64decode(b64encode('\x00','AB'),'AB')将返回'\xfb'而不是'\x00'。即使您只是在散列,那 正在 丢弃熵,但不会删除填充。