【发布时间】:2017-02-26 22:20:12
【问题描述】:
作为工作项目的一部分,我将一个 Perl 库移植到 Python。我对 Python 很满意,而对 Perl 则要少得多。
perl 代码使用Digest::MD5。该模块具有三个功能:
-
md5($data)接收数据并在 binary 中输出 md5 摘要 -
md5_hex($data)接收数据并在 hex 中输出 md5 摘要 -
md5_base64($data)接收数据并以base64编码吐出md5摘要
我可以用这样的方式复制 md5_hex:
import hashlib
string = 'abcdefg'
print(hashlib.md5(string.encode()).hexdigest())
效果很好(相同的输入至少给出相同的输出)。我似乎无法得到任何与其他两个功能相匹配的东西。
字符串编码真的不是我做过很多的事情,这并没有帮助。我一直将 perl 函数解释为它们采用 md5 摘要,然后以二进制或 base64 重新编码,如下所示:
import hashlib
import base64
string = 'abcdefg'
md5_string = hashlib.md5(string.encode()).hexdigest()
print(base64.b64encode(md5_string))
但也许这是错误的?我敢肯定,我只是缺少一些基本的东西。
Perl 文档在这里: https://metacpan.org/pod/Digest::MD5
【问题讨论】:
-
显然,您不想对哈希的十六进制表示进行 Base64 编码,而是对哈希本身进行编码。
-
如果要计算大文件的MD5,可以考虑这个方案:stackoverflow.com/questions/1131220/…
标签: python string perl encoding md5