Paul S
Paul S

Reputation: 11

Sequential SHA 256 hashes give different outputs for the same input

I thought that this would be a fairly common and straightforward problem, but I searched and was not able to find it.

I am a novice Python user, mostly self-taught. I'm trying what I thought would be a fairly straightforward exercise: generating a hash value from an input phrase. Here is my code:

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

I execute this and get the prompt: Give me a phrase:

I entered the phrase "Give me liberty or give me death!" and got the hash output 0x7f8ed43d6a80.

Just to test, I tried again with the same phrase, but got a different output: 0x7f1cc23bca80.

I thought that was strange, so I copied the original input and pasted it in, and got a third, different hash output: 0x7f358aabea80.

I'm sure there must be a simple explanation. I'm not getting any errors, and the code looks straightforward, but the hashes, while similar, are definitely different.

Can someone help?

Upvotes: 1

Views: 1941

Answers (1)

rlee827
rlee827

Reputation: 1873

You are directly printing an object, which returns a memory address in the __repr__ string. You need to use the hexdigest or digest methods to get the hash:

>>> 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'
>>> 

Upvotes: 10

Related Questions