首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python3.6相当于md5摘要()方法?

Python3.6相当于md5摘要()方法?
EN

Stack Overflow用户
提问于 2018-08-05 06:32:39
回答 1查看 614关注 0票数 -1

我很难在Python3.6中获得与Python2.7中的md5 digest()方法相同的结果。

Python 2.7:

import md5

encryption_base  = 'cS35jJYp15kjQf01FVqA7ubRaNOXKPmYGRbLUiimX0g3frQhzOZBmTSni4IEjHLWYMMioGaliIz5z8u2:abcdefghkmnopqrstuvwxyz:4'
digest = md5.new (encryption_base).digest()
print(digest)

#T┼ǃ×ÞRK(M<¶┤#  ²

Python 3.6:

from hashlib import md5

encryption_base  = 'cS35jJYp15kjQf01FVqA7ubRaNOXKPmYGRbLUiimX0g3frQhzOZBmTSni4IEjHLWYMMioGaliIz5z8u2:abcdefghkmnopqrstuvwxyz:4'
digest = md5(encryption_base.encode()).digest()
print(digest)

#b'T\xc5\x80\x9f\x9e\xe8RK(M<\xf4\xb4#\t\xfd'

我怎样才能得到与Python2.7结果相同的字符串呢?.hexdigest也不是这样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-05 06:38:05

您将得到完全相同的结果,即一个字节字符串。惟一的区别是,在Python3中,打印一个字节字符串会给出一个调试友好的表示,而不是原始的字节。这是因为原始字节不一定是可打印的,而print()需要Unicode字符串。

如果您必须具有相同的输出,请绕过负责将文本编码到基础区域设置编解码器的Unicode TextIOWrapper(),将字节直接写入stdout缓冲区:

import sys

digest = md5(encryption_base.encode('ASCII')).digest()
sys.stdout.buffer.write(digest + b'\n')

请注意,您必须确保也将ASCII值定义为ASCII值,或者至少像我上面所做的那样,将其编码为相同的编解码器encryption_base

将其定义为bytestring将为您提供与Python 2中相同的值,而无需编码:

encryption_base  = b'cS35jJYp15kjQf01FVqA7ubRaNOXKPmYGRbLUiimX0g3frQhzOZBmTSni4IEjHLWYMMioGaliIz5z8u2:abcdefghkmnopqrstuvwxyz:4'

当您在没有显式设置参数的情况下使用str.encode()时,您将编码为UTF-8。如果您的encryption_base字符串只包含ASCII代码点,则结果将是相同的,但如果其中也包含任何拉丁文-1或更高的代码点,则结果将不同。不要将字节与Unicode代码点混淆!请参阅https://nedbatchelder.com/text/unipain.html以完全了解其中的差异以及这种差异如何应用于Python2和3。

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

https://stackoverflow.com/questions/51690019

复制
相关文章

相似问题

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