2017-12-30 37 views
1

これはかなり一般的で直接的な問題だと思っていましたが、検索して見つけられませんでした。シーケンシャルSHA 256ハッシュは同じ入力に対して異なる出力を与えます

私は初心者のPythonユーザです。主に独学です。私は、入力句からハッシュ値を生成する、かなり簡単な演習であると思ったことを試しています。ここに私のコードは次のとおりです。

import hashlib 
target = input("Give me a phrase: ").encode('utf-8') 
hashed_target = hashlib.sha256(target) 
print(hashed_target) 

私はこれを実行し、プロンプトを取得: 私の句を与える:

私は、フレーズ入力された「私に自由を与えるか、または私に死を与えるを!」ハッシュ出力0x7f8ed43d6a80を得ました。

テストするだけで、同じフレーズでもう一度試しましたが、別の出力を得ました:0x7f1cc23bca80

私はそれが奇妙だと思ったので、元の入力をコピーして貼り付け、第3の異なるハッシュ出力を得ました:0x7f358aabea80

簡単な説明が必要です。私は何のエラーも出ませんし、コードは単純ですが、ハッシュは似ていますが、間違いありません。

誰かが助けることができますか?

+1

を、私は正確に同じ変数を毎回使用するようにコードを書き直しました。 輸入hashlib ターゲット=( 'UTF-8') hashed_target = hashlib.sha256(ターゲット) プリント(hashed_target) が、私はこの3回実行し、得た "私に自由を与えるか、または私に死を与える!"。エンコード3つの異なるハッシュ出力。 '0x7f7472104a80' ' 0x7fb113db6a80' '0x7f3e5051ea80' –

+1

私は私が見ると思うあなたの質問に編集として「私は彼をテストするためにやった」と:) –

答えて

9

オブジェクトを直接印刷しています。このオブジェクトは、__repr__文字列にメモリアドレスを返します。あなたはハッシュを取得するhexdigestまたはdigestメソッドを使用する必要があります。試験として

>>> import hashlib 
>>> testing=hashlib.sha256(b"sha256 is much longer than 12 hex characters") 
>>> testing 
<sha256 HASH object @ 0x7f31c1c64670> 
>>> hashed_testing=testing.hexdigest() 
>>> hashed_testing 
'a0798cfd68c7463937acd7c08e5c157b7af29f3bbe9af3c30c9e62c10d388e80' 
>>> 
+0

あなたのコメントを追加する必要があります。入力フレーズをエンコードすると、出力不可能になり、 'hashlib.sha256'の出力は文字列または数字ではありません。私がインタプリタで 'タイプ 'すると' class' _hashlib.HASH''が得られます。 'hexdigest'メソッドはそれを16進文字列に変換します。あれは正しいですか? –

+0

これは実際に変換ではありません。ハッシングメソッドは結果のハッシュをカプセル化する "sha256 HASHオブジェクト"を返し、 "hexdigest"はハッシュのゲッターメソッドです。 'digest'メソッドは生のダイジェストを' bytes'オブジェクトとして返します。 – rlee827

+0

多くのありがとう。コードに 'hexdigest()'メソッドを追加して、適切なSHA256出力を得ました。そして私は学んだ。 :) –

関連する問題