OTZ*_*OTZ 3 python algorithm base64 md5 data-structures
假设您在base64中编码了MD5哈希值.然后每个字符只需要6位就可以在结果的22字节字符串中存储每个字符(不包括结尾'==').因此,每个base64 md5散列可以缩小到6*22 = 132位,与原始的8*22 = 176位字符串相比,这需要少25%的内存空间.
是否有任何Python模块或函数可以让您以上述方式存储base64数据?
存储base64编码数据的最有效方法是对其进行解码并将其存储为二进制.base64是一种传输编码 - 将数据存储在其中是没有意义的,特别是在内存中,除非你有一个令人信服的理由.
另外,nitpick:哈希函数的输出不是十六进制字符串 - 这只是一个常见的表示.散列函数的输出是二进制数据的一些字节数.例如,如果您正在使用md5,sha或hashlib模块,则首先不需要将其编码为任何内容 - 只需调用.digest()而不是调用.hexdigest()哈希对象.
只需将 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)