3

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

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

返回假。但...

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

返回真。我知道 hexdigest/digest 返回最终的字符串表示形式,但是由于相同的数据已直接输入到两个哈希对象中,它们不应该评估为彼此相等吗?调用魔术方法时,对象不会md5 HASH知道内部身份吗?__eq__出于什么原因,对象本身会评估不平等?真的只是好奇。

4

2 回答 2

6

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

.hexdigest方法生成一个字符串(如果您使用的是 Python 3,则为字节字符串)并且可以比较字符串。

顺便提一句:

x = hashlib.md5('foo')
x == x # is True because it's the same object
于 2012-06-28T21:12:23.510 回答
1

原因可能是使用 == 来比较校验和会受到定时攻击:https ://groups.google.com/forum/?fromgroups=#! topic/keyczar-discuss/VXHsoJSLKhM(归功于https://中的 jwilkins stackoverflow.com/a/14487254/821378

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

于 2013-01-31T17:11:36.093 回答