首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于Perl摘要的Python::MD5函数

相当于Perl摘要的Python::MD5函数
EN

Stack Overflow用户
提问于 2016-10-17 20:03:41
回答 2查看 737关注 0票数 0

作为工作项目的一部分,我正在将Perl库移植到Python。我对Python很满意,但对于Perl来说,情况就差得多了。

perl代码使用摘要:MD5。该模块有三个功能:

  • md5($data)接收数据,并以二进制方式输出md5摘要。
  • md5_hex($data)接收数据,并以十六进制方式输出md5摘要。
  • md5_base64($data)接收数据,并以base64编码方式输出md5摘要。

我可以用这样的方法复制md5_hex:

代码语言:javascript
复制
import hashlib
string = 'abcdefg'
print(hashlib.md5(string.encode()).hexdigest())

它工作得很好(相同的输入至少提供相同的输出)。我似乎找不到其他两个功能相匹配的东西。

这并没有帮助字符串编码实际上不是我做过的很多事情。我一直将perl函数解释为它们接受md5摘要,然后用二进制或base64重新编码,如下所示:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-17 20:13:37

第一个方法只是调用md5上的md5方法。

代码语言:javascript
复制
>>> from hashlib import md5
>>> s = 'abcdefg'
>>> md5(s.encode()).digest()
b'z\xc6l\x0f\x14\x8d\xe9Q\x9b\x8b\xd2d1,Md'

md5_base64是摘要,但base64 64编码:

代码语言:javascript
复制
>>> base64.b64encode(md5(s.encode()).digest())
b'esZsDxSN6VGbi9JkMSxNZA=='

但是,Perl不返回散列填充,因此,为了兼容,需要去掉=填充字符:

代码语言:javascript
复制
>>> base64.b64encode(md5(s.encode()).digest()).strip(b'=')
b'esZsDxSN6VGbi9JkMSxNZA'
票数 3
EN

Stack Overflow用户

发布于 2016-10-17 20:14:03

首先,注意摘要:MD5文档:

请注意,返回的base64编码字符串不会填充为4字节长的倍数。如果您希望与其他base64编码的md5摘要具有互操作性,则可能需要将冗余字符串"==“附加到结果中。

其次,请注意,您希望对散列进行Base64编码,而不是对它的十六进制表示形式进行编码:

代码语言:javascript
复制
print(base64.b64encode(hashlib.md5(string.encode()).digest()))

esZsDxSN6VGbi9JkMSxNZA==

代码语言:javascript
复制
perl -MDigest::MD5=md5_base64 -E 'say md5_base64($ARGV[0])' abcdefg

esZsDxSN6VGbi9JkMSxNZA

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40094746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档