2017-01-12 7 views
0

私は、MD5がhereという2つの整数 "メッセージ"と衝突することを学生に示したいと思います。これは、Python 2.7のための私のオリジナルのデモです:予想通りPython 3でintをハッシュする

from hashlib import md5 

m1 = "d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70" 
m2 = "d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70" 
# differences        ^            ^      ^           ^            ^      ^

print md5(m1.decode("hex")).hexdigest() 
print md5(m2.decode("hex")).hexdigest() 

、それは二回79054025255fb1a26e4bc422aef54eb4を印刷します。

print(md5(int(m1, 16)).hexdigest()) 
print(md5(int(m2, 16)).hexdigest()) 

私が得るすべてはTypeError: object supporting the buffer API requiredメッセージです: は、今私はとしてPython 3.5への最後の2行を翻訳しようとします。メソッドdecodeはもはやPython 3で動作しませんが、私は上記のようにint(m, base)で置き換えることをお勧めします。ハッシュ関数APIではなく、そこに問題があるかもしれませんか?

答えて

5

Python 2では、文字列を16進数でデコードすると、整数ではなくバイト文字列が返されます。 16進文字列を整数として解釈しようとしないでください。

は、バイト文字列にあなたの進文字列をオンにするbinascii.unhexlify() functionを使用します。同じコードが同様のPython 2で正常に動作することを

from binascii import unhexlify 

print(md5(unhexlify(m1)).hexdigest()) 

注意を。

あなたは、とにかくデコードを使用codecs.decode() functionを使用する場合:

import codecs 

print(md5(codecs.decode(m1, 'hex')).hexdigest()) 

ここでも、同じコードが同様のPython 2で動作します。

+0

これは魅力のように機能します、ありがとう!私はこのモジュールを知らなかった。 – Aristide

関連する問題