python bitcoin clave pública para abordar el error de código

import hashlib

b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'

def hex_open_key_to_hex_hesh160(hex_open_key):
h160 = hashlib.new('ripemd160')
h160.update(hashlib.sha256(('04'+hex_open_key).decode('hex')).hexdigest().decode('hex'))
return h160.hexdigest()

def hex_hesh160_to_hex_addr_v0(hex_hesh160):
return '00'+hex_hesh160+hashlib.sha256(hashlib.sha256(('00'+hex_hesh160).decode('hex')).hexdigest().decode('hex')).hexdigest()[0:8]

def hex_addr_v0_to_hex_hesh160(hex_addr_v0):
return hex_addr_v0[2:-8]


def hex_to_base58(hex_data):
base58 = ''
int_data = int(hex_data, 16)
while int_data >= len(b58chars):
    base58 = b58chars[int_data%len(b58chars)] + base58
    int_data = int_data/len(b58chars)
base58 = b58chars[int_data%len(b58chars)] + base58
for i in xrange(len(hex_data)/2):
    if hex_data[i*2:i*2+2] == '00':
        base58 = '1' + base58
    else:
        break
return base58

def base58_to_hex(base58):
hex_data = ''
int_data = 0
for i in xrange(-1, -len(base58)-1, -1):
    int_data += (b58chars.index(base58[i]))*58**(-i-1)
hex_data = hex(int_data)[2:-1]
for i in xrange(len(base58)):
    if base58[i] == '1':
        hex_data = '00' + hex_data
    else:
        break
return hex_data

hex_open_key = '5bd8834885082d9e9775f2084610bea79d2bd7acde2fc28b4dba85b0902ac786ef3a1fa082da527a3a51bcd71104b4e6ef91b62b2e93bcfdbc4ac7c35e9fddb'
print hex_to_base58(hex_hesh160_to_hex_addr_v0(hex_open_key_to_hex_hesh160(hex_open_key)))

código anterior para obtener la clave pública de bitcoin a la dirección, ocurre un error de clave pública

private key is 0x5c58d

public key pairs

x =  0x5bd8834885082d9e9775f2084610bea79d2bd7acde2fc28b4dba85b0902ac786L
y1 =  0xef3a1fa082da527a3a51bcd71104b4e6ef91b62b2e93bcfdbc4ac7c35e9fddbL
y2  =  0xf10c5e05f7d25ad85c5ae4328eefb4b19106e49d4d16c430243b5382ca15fe54L

la clave pública x e y1 cometen un error

5bd8834885082d9e9775f2084610bea79d2bd7acde2fc28b4dba85b0902ac786ef3a1fa082da527a3a51bcd71104b4e6ef91b62b2e93bcfdbc4ac7c35e9fddb

Traceback (most recent call last):
   File "<module3>", line 45, in <module>
   File "<module3>", line 7, in hex_open_key_to_hex_hesh160
   File "C:\Python27\lib\encodings\hex_codec.py", line 42, in hex_decode
   output = binascii.a2b_hex(input)
TypeError: Odd-length string

clave pública x e y2 sin error

5bd8834885082d9e9775f2084610bea79d2bd7acde2fc28b4dba85b0902ac786f10c5e05f7d25ad85c5ae4328eefb4b19106e49d4d16c430243b5382ca15fe54

address
    17MnDMuqhiTnQ1Yc38H2RYdSHkfUq6wmrq

Respuestas (1)

Obtiene el error porque la cadena hexadecimal que proporcionó tiene 127 caracteres. Necesitas rellenar con ceros.

Incluso si rellena con ceros 05bd8834885082d9e9775f2084610bea79d2bd7acde2fc28b4dba85b0902ac786ef3a1fa082da527a3a51bcd71104b4e6ef91b62b2e93bcfdbc4ac7c35e9fddbno es una clave pública válida. Debe comenzar con 04.

Las coordenadas y1, y2 de su clave pública tampoco se encuentran en la Curva. No sé de dónde sacaste la clave, pero no es válida.

La clave pública correspondiente a la clave privada 0x5bd8834885082d9e9775f2084610bea79d2bd7acde2fc28b4dba85b0902ac786es 04b302d50e6afaea3eb3194fced5b12ba45aa170d2d717d5a598511a96187a7a90e8c84b1f57a822bda9ecf111374c9e92fe0d1fb5a192a45790f437828d17f009y la dirección P2PKH es14pFAXD2uQpdpToL5LS4oh1bsSGXnVpA2r