hashlib - 为什么摘要匹配但是裸对象不匹配?

时间:2012-06-28 21:08:32

标签: python md5 hashlib

我想知道在python 2.7中观察到的行为的实际原因是什么:

import hashlib
hashlib.md5('foo') == hashlib.md5('foo')

返回false。但...

import hashlib
hashlib.md5('foo').hexdigest() == hashlib.md5('foo').hexdigest()

返回true。我理解hexdigest / digest返回最后的字符串表示,但由于相同的数据已直接输入到两个哈希对象中,它们不应该评估为彼此相等吗?当调用魔法md5 HASH方法时,__eq__对象不会意识到内部身份吗?为什么对象本身会评估不平等?真的很好奇。

2 个答案:

答案 0 :(得分:6)

hashlib.md5个对象没有相等比较,因为它们是不同的对象,结果是错误的。

.hexdigest方法生成一个字符串(如果你在Python 3上,则生成字节串),并且可以比较字符串。

顺便说一句:

x = hashlib.md5('foo')
x == x # is True because it's the same object

答案 1 :(得分:1)

原因可能是使用==来比较校验和是针对时间攻击的:https://groups.google.com/forum/?fromgroups=#!topic/keyczar-discuss/VXHsoJSLKhMhttps://stackoverflow.com/a/14487254/821378中jwilkins的学分)

在最近的Python版本中,添加了一个函数,但我忘记了它是针对所有哈希还是仅针对HMAC:http://docs.python.org/3/library/hmac#hmac.compare_digest