Acerca de realizar hash SHA-256 en la clave pública

Estoy siguiendo este enlace , tratando de realizar SHA-256 en una clave pública dada.
Sin embargo, no puedo obtener el resultado esperado.
Estoy usando la biblioteca sha256 en python hashlib

la entrada es

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

La producción de la mina es

32511e82d56dcea68eb774094e25bab0f8bdd9bc1eca1ceeda38c7a43aceddce

El resultado esperado en bitcoin.it es

600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

¿Echo de menos algo?

Respuestas (1)

El resultado que está obteniendo ( 3251...) es el resultado de sha256 en la cadena 0450... .

El resultado esperado en bitcoin.it es el resultado de sha256 en los bytes que actualmente están codificados en hexadecimal. Para resolver esto, decodifique hexadecimal antes de codificar su entrada. En Python 2:

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

Eso debería retener outputel valor esperado.

Sí, eso también me ha hecho tropezar. Deberá usar objetos de bytes - b"hexData"- para Python 3.x
Buen punto. No estoy seguro de cómo escribir el código para que sea compatible con Python 3 (se reemplaza "string".encode('hex')), así que, a menos que lo haga, solo especificaré Python 2 aquí.
import codecs, entonces codecs.encode(codecs.decode("abcdef".encode("utf-8"), "hex")[::-1], "hex").decode()... En mi opinión, es bastante contraintuitivo, ya que estoy tan acostumbrado a Python 2.7