
Este script obtiene la dirección pública de la clave privada sin comprimir.
import ecdsa
import hashlib
import base58
private_key = input("privatekey: ") # e41b45e722251672c01a28e4fada590471fea09f90d13b143033ed3a1107ef49
# Convert hex private key to bytes
private_key = bytes.fromhex(private_key)
# Derivation of the private key
signing_key = ecdsa.SigningKey.from_string(
private_key, curve=ecdsa.SECP256k1)
verifying_key = signing_key.get_verifying_key()
public_key = bytes.fromhex("04") + verifying_key.to_string()
# Hashes of public key
sha256_1 = hashlib.sha256(public_key)
ripemd160 = hashlib.new("ripemd160")
ripemd160.update(sha256_1.digest())
# Adding prefix to identify Network
hashed_public_key = bytes.fromhex("00") + ripemd160.digest()
# Checksum calculation
checksum_full = hashlib.sha256(
hashlib.sha256(hashed_public_key).digest()).digest()
checksum = checksum_full[:4]
# Adding checksum to hashpubkey
bin_addr = hashed_public_key + checksum
# Encoding to address
address = str(base58.b58encode(bin_addr))
final_address = address[2:-1]
# change 2
print(final_address)
Formato (clave privada):
uncompressed: 0x80 + [32-byte secret] + [4 bytes of Hash() of previous 33 bytes]
, base58 encoded
compressed: 0x80 + [32-byte secret] + 0x01 + [4 bytes of Hash() previous 34 bytes]
, base58 encoded
case 1:
secret (hex): 1111111111111111111111111111111111111111111111111111111111111111
uncompressed:
secret (base58): 5HwoXVkHoRM8sL2KmNRS217n1g8mPPBomrY7yehCuXC1115WWsh
pubkey (hex): 044f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1
address (base58): 1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a
compressed:
secret (base58): L4xkFv5sbttQcsgnTjzqJuQdNfHC5gk9zsK5HmaV822qu79zJA7L
pubkey (hex): 034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
address (base58): 1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9
Necesito usar este código para dos formatos, pero no entiendo qué hay que arreglar. Cuando inserto una clave de compresión privada 682cf5791be8d4526aacf63bb7ab201f5cd1d732c1f634e5839379191b02295925, aparece el siguiente mensaje de error:
ecdsa.keys.MalformedPointError: longitud de clave privada no válida, recibida 33, esperada 32
He hecho muchas pruebas, pero no puedo averiguar qué está mal. Dime cómo cambiar correctamente el código.
Gracias de antemano por su ayuda.