在Python中保存base64数据最节省内存的方法?

发布于 2024-09-12 23:02:38 字数 203 浏览 7 评论 0原文

假设您有一个以 Base64 编码的 MD5 哈希值。然后每个 字符只需要 6 位来存储每个字符 结果 22 字节字符串(不包括结尾的“==”)。因此,每个 base64 md5 哈希可以缩小到 6*22 = 132 位,这 与原来的8*22=176相比,需要减少25%的内存空间 位字符串。

有没有任何Python模块或函数可以让你存储base64 数据按照上面描述的方式?

Suppose you have a MD5 hash encoded in base64. Then each
character needs only 6 bits to store each character in the
resultant 22-byte string (excluding the ending '=='). Thus, each
base64 md5 hash can shrink down to 6*22 = 132 bits, which
requires 25% less memory space compared to the original 8*22=176
bits string.

Is there any Python module or function that lets you store base64
data in the way described above?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情深缘浅 2024-09-19 23:02:38

存储 Base64 编码数据的最有效方法是将其解码并将其存储为二进制。 base64 是一种传输编码 - 在其中存储数据是没有意义的,尤其是在内存中,除非您有令人信服的理由。

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

The most efficient way to store base64 encoded data is to decode it and store it as binary. base64 is a transport encoding - there's no sense in storing data in it, especially in memory, unless you have a compelling reason otherwise.

Also, nitpick: The output of a hash function is not a hex string - that's just a common representation. The output of a hash function is some number of bytes of binary data. If you're using the md5, sha, or hashlib modules, for example, you don't need to encode it as anything in the first place - just call .digest() instead of .hexdigest() on the hash object.

前事休说 2024-09-19 23:02:38

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

Simply decode the base64 data to binary:

>>> 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
爱人如己 2024-09-19 23:02:38

“存储base64数据”

不。

做。不是。店铺。 Base64。数据。

Base64 是通过对某物进行编码以使其更大而构建的。

存储原始的东西。切勿存储某物的base64编码。

"store base64 data"

Don't.

Do. Not. Store. Base64. Data.

Base64 is built by encoding something to make it bigger.

Store the original something. Never store the base64 encoding of something.

秋千易 2024-09-19 23:02:38

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

只需使用

base64.decodestring

in base64 module. That is,

import base64
binary = base64.decodestring(base64_string)

是原始 Base64 字符串的更有效的内存表示形式。如果你
正在截断 Base64 md5 中的尾随 '==',请像这样使用它

base64.decodestring(md5+'==')

David gave an answer that works on all base64 strings.

Just use

base64.decodestring

in base64 module. That is,

import base64
binary = base64.decodestring(base64_string)

is a more memory efficient representation of the original base64 string. If you
are truncating trailing '==' in your base64 md5, use it like

base64.decodestring(md5+'==')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文