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

时间:2010-08-07 10:08:16

标签: python algorithm data-structures md5 base64

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

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

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

只需将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

答案 2 :(得分:2)

  

“存储base64数据”

别。

执行。不。商店。 Base64编码。数据

Base64是通过编码某些东西来构建的,以使其更大。

存储原始内容。切勿存储某事的base64编码。

答案 3 :(得分:1)

David给出了一个适用于所有base64字符串的答案。

在base64模块中使用

base64.decodestring
。也就是说,

import base64
binary = base64.decodestring(base64_string)

是原始base64字符串的更高内存效率表示。如果你 正在截断你的base64 md5中的尾随'==',像

一样使用它
base64.decodestring(md5+'==')