3

I am following this link, trying to perform SHA-256 on a given public key.
However, I cannot get the expected result.
I am using the sha256 library in python hashlib

The input is

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

Mine output is

32511e82d56dcea68eb774094e25bab0f8bdd9bc1eca1ceeda38c7a43aceddce

The expected output on bitcoin.it is

600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

Do I miss anything?

1 Answer 1

7

The result you are getting (3251...) is the result of sha256 on the string 0450....

The expected output on bitcoin.it is the result of sha256 on the bytes that are currently hex-encoded. To resolve this, hex-decode before hashing your input. In Python 2:

import hashlib
in_data = "0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6".decode('hex')
my_sha = hashlib.sha256()
my_sha.update(in_data)
output = my_sha.digest().encode('hex')

That should retain output with the expected value.

3
  • 1
    Yep, that's tripped me up too. You'll need to use bytes objects - b"hexData" - for Python 3.x Commented Apr 8, 2015 at 15:43
  • 1
    Good point. I'm not sure how to write the code so it's compatible with Python 3 ("string".encode('hex') is replaced), so unless you do I'll just specify Python 2 here.
    – JohnDvorak
    Commented Apr 8, 2015 at 15:49
  • 1
    import codecs, then codecs.encode(codecs.decode("abcdef".encode("utf-8"), "hex")[::-1], "hex").decode()... It's quite counterintuitive IMO, as I'm so used to Python 2.7 Commented Apr 8, 2015 at 15:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.