在Python中保存base64数据的大多数内存有效的方法?

OTZ*_*OTZ 3 python algorithm base64 md5 data-structures

假设您在base64中编码了MD5哈希值.然后每个字符只需要6位就可以在结果的22字节字符串中存储每个字符(不包括结尾'==').因此,每个base64 md5散列可以缩小到6*22 = 132位,与原始的8*22 = 176位字符串相比,这需要少25%的内存空间.

是否有任何Python模块或函数可以让您以上述方式存储base64数据?

Nic*_*son 7

存储base64编码数据的最有效方法是对其进行解码并将其存储为二进制.base64是一种传输编码 - 将数据存储在其中是没有意义的,特别是在内存中,除非你有一个令人信服的理由.

另外,nitpick:哈希函数的输出不是十六进制字符串 - 这只是一个常见的表示.散列函数的输出是二进制数据的一些字节数.例如,如果您正在使用md5,sha或hashlib模块,则首先不需要将其编码为任何内容 - 只需调用.digest()而不是调用.hexdigest()哈希对象.


Ned*_*der 5

只需将 Base64 数据解码为二进制即可:

>>> b64 = "COIC09jwcwjiciOEIWIUNIUNE9832iun"
>>> len(b64)
32
>>> b = b64.decode("base64")
>>> b
'\x08\xe2\x02\xd3\xd8\xf0s\x08\xe2r#\x84!b\x144\x85\r\x13\xdf7\xda+\xa7'
>>> len(b)
24
Run Code Online (Sandbox Code Playgroud)