Informationen zum Durchführen von SHA-256-Hashing für den öffentlichen Schlüssel

Ich folge diesem Link und versuche, SHA-256 für einen bestimmten öffentlichen Schlüssel auszuführen.
Ich kann jedoch nicht das erwartete Ergebnis erzielen.
Ich verwende die sha256-Bibliothek in Python Hashlib

Die Eingabe ist

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

Meine Ausgabe ist

32511e82d56dcea68eb774094e25bab0f8bdd9bc1eca1ceeda38c7a43aceddce

Die erwartete Ausgabe auf bitcoin.it ist

600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

Verpasse ich etwas?

Antworten (1)

Das Ergebnis, das Sie erhalten ( 3251...), ist das Ergebnis von sha256 für die Zeichenfolge 0450... .

Die erwartete Ausgabe auf bitcoin.it ist das Ergebnis von sha256 auf den Bytes , die derzeit hexadezimal codiert sind. Um dies zu beheben, führen Sie eine Hex-Decodierung durch, bevor Sie Ihre Eingabe hashen. In Python2:

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

Das sollte outputbeim Erwartungswert bleiben.

Ja, das hat mich auch gestolpert. Sie müssen bytes-Objekte - b"hexData"- für Python 3.x verwenden
Guter Punkt. Ich bin mir nicht sicher, wie ich den Code schreiben soll, damit er mit Python 3 kompatibel ist ("string".encode('hex') wird ersetzt), also gebe ich hier nur Python 2 an, wenn Sie dies nicht tun.
import codecs, dann codecs.encode(codecs.decode("abcdef".encode("utf-8"), "hex")[::-1], "hex").decode()... Es ist meiner Meinung nach ziemlich kontraintuitiv, da ich so an Python 2.7 gewöhnt bin