Como Usar a Testnet Chainphon e se Preparar para o Lançamento Oficial
Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
Guia Completo para Gerar Chave Pública e Endereço Bitcoin com Python
Neste artigo, você aprenderá como gerar uma chave pública comprimida e um endereço Bitcoin a partir de uma chave privada usando a biblioteca ecdsa em Python, além de entender conceitos essenciais de criptografia aplicados ao Bitcoin.
Introdução
O Bitcoin utiliza criptografia de curva elíptica (ECDSA) para gerar pares de chaves privadas e públicas que garantem a segurança das transações. Este tutorial apresenta um exemplo prático para quem deseja compreender o processo de derivação das chaves e dos endereços Bitcoin.
Importação das Bibliotecas Necessárias
Para executar o código, certifique-se de ter a biblioteca ecdsa instalada. Além dela, usaremos hashlib para funções de hash e uma implementação manual do Base58Check, padrão para endereços Bitcoin.
O Código Explicado
A seguir está o código comentado e estruturado para gerar a chave pública comprimida e o endereço Bitcoin:
import ecdsa
import hashlib
# Valor decimal da chave privada revelada
privkey_decimal = 62522620898388648159897954119572167059065661617885912620603899974102669643449
# Converter para 32 bytes (256 bits)
privkey_bytes = privkey_decimal.to_bytes(32, byteorder='big')
# Alfabeto Base58 para codificação
alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
def base58_encode(b):
n = int.from_bytes(b, 'big')
res = ''
while n > 0:
n, r = divmod(n, 58)
res = alphabet[r] + res
pad = 0
for byte in b:
if byte == 0:
pad += 1
else:
break
return '1' * pad + res
def pubkey_to_address(pubkey_bytes):
sha256 = hashlib.sha256(pubkey_bytes).digest()
ripemd160 = hashlib.new('ripemd160', sha256).digest()
prefix = b'\x00' # Prefixo para endereços Bitcoin padrão (mainnet)
payload = prefix + ripemd160
checksum = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4]
address_bytes = payload + checksum
return base58_encode(address_bytes)
def private_to_compressed_pubkey(priv_key_bytes):
sk = ecdsa.SigningKey.from_string(priv_key_bytes, curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()
x = vk.pubkey.point.x()
y = vk.pubkey.point.y()
prefix = b'\x02' if y % 2 == 0 else b'\x03' # Prefixo para chave comprimida
return prefix + x.to_bytes(32, byteorder='big')
# Gerar chave pública comprimida
pubkey = private_to_compressed_pubkey(privkey_bytes)
pubkey_hex = pubkey.hex()
# Gerar endereço Bitcoin derivado da chave pública
btc_address = pubkey_to_address(pubkey)
# Chave pública alvo para comparação (exemplo)
target_pubkey = "03150992937967192EBCD2539E5A949689AC69E6458F9178E7251356FFE079B7F0".lower()
# Impressão dos resultados
print(f"🔐 Chave privada (hex): {privkey_bytes.hex()}")
print(f"🔑 Chave pública (hex): {pubkey_hex}")
print(f"🎯 Chave pública esperada: {target_pubkey}")
print(f"✅ Match? {pubkey_hex == target_pubkey}")
print(f"🏁 Endereço Bitcoin derivado: {btc_address}")
Detalhes Técnicos Importantes
- Chave Privada: Um número secreto que deve ser mantido confidencial.
- Chave Pública Comprimida: Representação compacta da chave pública, iniciada por
0x02ou0x03conforme o paridade do valor y. - Base58Check: Sistema de codificação utilizado para tornar os endereços Bitcoin legíveis e evitar confusões com caracteres similares.
- Hashes SHA256 e RIPEMD160: Funções criptográficas usadas para gerar um identificador seguro do endereço.
Conclusão e Responsabilidade
Este código demonstra a derivação básica de chaves e endereços Bitcoin, um componente essencial para quem deseja explorar programação e segurança em criptomoedas. Sempre avalie cuidadosamente os riscos ao trabalhar com chaves privadas reais e evite expor seus dados confidenciais.
Este conteúdo é para fins educacionais e não constitui aconselhamento financeiro. Faça sua própria análise antes de investir ou operar com criptomoedas.

Comentários
Comente só assim vamos crescer juntos!