/ / Python3; Bitcoin; sha256 hash; clé privée au format d'importation de portefeuille double hash ne fonctionne pas

Python3; Bitcoin; sha256 hash; clé privée au format d'importation de portefeuille double hash ne fonctionne pas

J'essaie d'écrire ma propre clé privée en wifcode de format. Je crois que le codage base58 est correct, mais je ne reçois pas la même sortie. Quand je regarde plus loin dans mon code, je remarque que ma sortie de mon double hash sha256 n'est pas la même, ce qui conduit à une somme de contrôle différente et jette tout le long de la ligne.

Voici un peu de code où réside mon problème. Cette partie est réécrite uniquement pour ce poste et laisse de côté toutes mes autres étapes qui ne sont pas nécessaires pour être affichées pour ce problème.

import hashlib

a = "800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D"


def double_hash(num):
first_hash = hashlib.sha256(num.encode()).hexdigest()
print(first_hash, "first hash")
second_hash = hashlib.sha256(first_hash.encode()).hexdigest()
return second_hash


def main():
print(double_hash(a))


if __name__ == "__main__":
main()

# ---- Output ----
# >>> e2e4146a36e9c455cf95a4f259f162c353cd419cc3fd0e69ae36d7d1b6cd2c09 first hash
# >>> fe32ab4c7a99d37256148b0dabc6390272ebe2572b943abc2580bfdacac98fbc

# ---- Expected output ----
# 8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592 first hash
# 507A5B8DFED0FC6FE8801743720CEDEC06AA5C6FCA72B07C49964492FB98A714

Voici ma source:
https://en.bitcoin.it/wiki/Wallet_import_format

Réponses:

0 pour la réponse № 1

Je ne sais pas comment je suis arrivé à ce sujet. Je pensais que la représentation sous forme de chaîne du nombre hexadécimal doit être convertie en un autre nombre. J'ai donc essayé de le convertir en format binaire. Par essais et erreurs, je suis tombé sur une tentative d’essayer de la non-clarifier et cela a fonctionné.

import hashlib
import binascii

a = "800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D"


def double_hash(num):
first_hash = hashlib.sha256(binascii.unhexlify(num)).hexdigest()
print(first_hash, "first hash")
second_hash = hashlib.sha256(binascii.unhexlify(first_hash)).hexdigest()
return second_hash


def main():
print(double_hash(a))


if __name__ == "__main__":
main()

# ---- Output ----
# 8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592 first hash
# 507a5b8dfed0fc6fe8801743720cedec06aa5c6fca72b07c49964492fb98a714

# ---- Expected output ----
# 8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592 first hash
# 507A5B8DFED0FC6FE8801743720CEDEC06AA5C6FCA72B07C49964492FB98A714