#python #python-3.x #random #hashlib
#python #python-3.x #Случайный #hashlib
Вопрос:
Этот скрипт генерирует хэш, но где-то он что-то неправильно записал в функцию.
from bitcoin import *
import os
import hashlib
import base58
while True:
priv = random_key()
pubkey = privtopub(priv)
compress_pubkey = False
if (compress_pubkey):
if (ord(pubkey[-2:].decode('hex')) % 2 == 0):
pubkey_compressed = '02'
else:
pubkey_compressed = '03'
pubkey_compressed = pubkey[2:66]
hex_str = bytearray.fromhex(pubkey_compressed)
else:
hex_str = bytearray.fromhex(pubkey)
key_hash = hash160(hex_str)
def hash160(hex_str):
sha = hashlib.sha256()
rip = hashlib.new('ripemd160')
sha.update(hex_str)
rip.update( sha.digest() )
print ( "key_hash = t" rip.hexdigest() )
return rip.hexdigest() # .hexdigest() is hex ASCII
Я проверил работу скрипта. Сделал print (pubkey)
. Открытые ключи отображаются в результате, но мне не нужно получать key_hash. К сожалению, когда я делаю print ("key_hash = t" rip.hexdigest ())
Результат не выполняется! Я не разбираюсь в программировании. Помогите исправить код!
Комментарии:
1. Ну, вы вызываете
hash160
, прежде чем определить его2.Обратите внимание, что вы вызываете
hash160()
до того, как вы фактически определили эту функцию. Единственный способ, которым этот код мог бы фактически выполняться без ошибок, — это если бы один из ваших импортируемых файлов (должен был бы бытьbitcoin
) был введен в свою собственную функцию с таким именем; эта версияhash160()
, очевидно, не содержит3. @Carcigenicate Что нужно сделать, чтобы отобразить результат?
4. @jasonharper Как и что мне нужно изменить в hash160 ()?
Ответ №1:
После перестановки кода:
from bitcoin import *
import os
import hashlib
import base58
def hash160(hex_str):
sha = hashlib.sha256()
rip = hashlib.new('ripemd160')
sha.update(hex_str)
rip.update(sha.digest())
print("key_hash = t" rip.hexdigest())
return rip.hexdigest() # .hexdigest() is hex ASCII
while True:
priv = random_key()
pubkey = privtopub(priv)
compress_pubkey = False
if (compress_pubkey):
if (ord(pubkey[-2:].decode('hex')) % 2 == 0):
pubkey_compressed = '02'
else:
pubkey_compressed = '03'
pubkey_compressed = pubkey[2:66]
hex_str = bytearray.fromhex(pubkey_compressed)
else:
hex_str = bytearray.fromhex(pubkey)
key_hash = hash160(hex_str)
Вывод:
key_hash = b0ac6f690633331af487f594dd3c42c6c67ce085
key_hash = de735b3046545f63c8cb2f7d44b7f24a8b769ad7
key_hash = 49b0ae2b541832797680b977ca9e374d1a621787
key_hash = ea3e1d9762331e791412e96b2a67f418cfd6ca2c
key_hash = e5ff3affd4ba7eb2bb343548f587bde9dbdace6b
key_hash = b1a952405516abe494e7e32610a3eaf85d7914f2
key_hash = a0050e1f18b2d0738c458e237a447bd8f2810fec
key_hash = 23eeca93355ba511bdf28c475b5e62d2da64546b
key_hash = cc5904bae39ee51b75097c95ad0307a21ecef1bc
... And So On
Обратите внимание, что существует бесконечный цикл ( while True
), рассмотрите возможность замены на определенное количество итераций.