3

Python2.7で観察された動作の実際的な理由は何でしょうか。

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

falseを返します。だが...

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

trueを返します。hexdigest / digestが最終的な文字列表現を返すことは理解していますが、同じデータが2つのハッシュオブジェクトに直接入力されているため、それらは互いに等しいと評価されるべきではありませんか?魔法のメソッドが呼び出されmd5 HASHたときに、オブジェクトは内部IDを認識しませんか?__eq__オブジェクト自体が不平等を評価する理由は何ですか?本当に好奇心が強い。

4

2 に答える 2

6

オブジェクトの同等性の比較はありませんhashlib.md5。したがって、オブジェクトは異なるオブジェクトであるため、結果はfalseになります。

この.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 stackoverflow.com/a/14487254/821378 )

最近の Python バージョンでは、関数が追加されましたが、それがすべてのハッシュまたは HMAC のみの場合は忘れました: http://docs.python.org/3/library/hmac#hmac.compare_digest

于 2013-01-31T17:11:36.093 に答える