8

生成された MD5 ハッシュを取得しました。これを文字列からの別の MD5 ハッシュと比較したいと思います。以下のステートメントは、印刷すると同じように見え、正しいはずですが、誤りです。

hashlib.md5("foo").hexdigest() == "acbd18db4cc2f85cedef654fccc4a4d8"

hexdigest()Google は、文字列を返さないため、 からの結果をエンコードする必要があると教えてくれました。ただし、以下のコードも機能しないようです。

hashlib.md5("foo").hexdigest().encode("utf-8") == "foo".encode("utf-8")
4

3 に答える 3

14

Python 2.7、.hexdigest() は str を返します

>>> hashlib.md5("foo").hexdigest() == "acbd18db4cc2f85cedef654fccc4a4d8"
True
>>> type(hashlib.md5("foo").hexdigest())
<type 'str'>

パイソン3.1

.md5() はユニコード (「foo」) を使用しないため、バイト ストリームにエンコードする必要があります。

>>> hashlib.md5("foo").hexdigest()
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    hashlib.md5("foo").hexdigest()
TypeError: Unicode-objects must be encoded before hashing

>>> hashlib.md5("foo".encode("utf8")).hexdigest()
'acbd18db4cc2f85cedef654fccc4a4d8'

>>> hashlib.md5("foo".encode("utf8")).hexdigest() == 'acbd18db4cc2f85cedef654fccc4a4d8'
True
于 2010-08-27T10:40:49.263 に答える
5

ハッシュ比較に == を使用すると、セキュリティ上の脆弱性が生じる可能性があります。

https://groups.google.com/forum/?fromgroups=#!topic/keyczar-discuss/VXHsoJSLKhM

攻撃者がタイミングの違いを探し、キースペースを効率的に反復して、等価テストに合格する値を見つける可能性があります。

于 2013-01-23T18:56:41.160 に答える
2

hexdigest文字列を返します。最初のステートメントはTruepython-2.x で返されます。

python-3.x では、引数を関数にエンコードする必要があります。md5その場合、等号もTrue. エンコードしないと、 が発生しTypeErrorます。

于 2010-08-27T10:37:17.097 に答える