
Gerador de Chaves Privadas Bitcoin e Consulta de Saldo com Python
Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
Gerador de Chaves Privadas Bitcoin e Consulta de Saldo com Python
Neste artigo, você encontrará um exemplo completo de como gerar chaves privadas Bitcoin no formato WIF, criar endereços Bitcoin correspondentes e consultar seus saldos usando Python. O script utiliza bibliotecas especializadas e realiza consultas assíncronas para otimizar a performance.
Visão geral do processo
O código apresentado gera chaves privadas aleatórias dentro de um intervalo hexadecimal, converte essas chaves para o formato WIF (Wallet Import Format), obtém o endereço Bitcoin e, em seguida, consulta o saldo dos endereços gerados utilizando uma API pública.
Dependências necessárias
bit
— para manipulação de chaves e endereços Bitcoin (repositório oficial).aiohttp
easyncio
— para consultas HTTP assíncronas e eficiente gerenciamento de múltiplas requisições.hashlib
ebase58
— para funções criptográficas e codificação base58.
Explicação detalhada do código
1. Consulta de saldo assíncrona
Funções consulta_btc_endereco
e consulta_multipla_btc
utilizam aiohttp
para buscar o saldo de um endereço Bitcoin na API Blockchain.info. As consultas são feitas simultaneamente para maior eficiência.
2. Conversão de chaves privadas para WIF
As funções hex_to_wif
e private_key_to_wif
transformam a chave privada hexadecimal em formato WIF, adicionando prefixos, compressão e checksum necessários para garantir a integridade da chave.
3. Geração de chaves privadas aleatórias
O script gera valores aleatórios dentro de um intervalo hexadecimal, formata uma mini private key e calcula seu hash SHA-256. Essa hash é então convertida para WIF e um endereço Bitcoin é derivado usando a biblioteca bit
.
Exemplo de código Python completo e otimizado
import hashlib
import base58
import random
from bit import Key
import aiohttp # pip install aiohttp
import asyncio
async def consulta_btc_endereco(session, endereco):
url = f'https://blockchain.info/q/addressbalance/{endereco}?confirmations=6'
try:
async with session.get(url) as response:
if response.status == 200:
saldo = await response.text()
return saldo
else:
return None
except Exception as e:
print(f"Erro de conexão com {endereco}: {e}")
return None
async def consulta_multipla_btc(enderecos):
async with aiohttp.ClientSession() as session:
tarefas = [consulta_btc_endereco(session, endereco) for endereco in enderecos]
resultados = await asyncio.gather(*tarefas)
for i, saldo in enumerate(resultados):
if saldo is not None:
print(f"Endereço {enderecos[i]}: {saldo} satoshis")
def hex_to_wif(hex_private_key):
prefix = b'\x80'
private_key_bytes = bytes.fromhex(hex_private_key)
extended_key = prefix + private_key_bytes
checksum = hashlib.sha256(hashlib.sha256(extended_key).digest()).digest()[:4]
extended_key_with_checksum = extended_key + checksum
wif = base58.b58encode(extended_key_with_checksum)
return wif.decode('utf-8')
def private_key_to_wif(private_key_hex, compression='01'):
if private_key_hex.startswith('0x'):
private_key_hex = private_key_hex[2:]
private_key = private_key_hex.zfill(64)
data = "80" + private_key + compression
hash1 = hashlib.sha256(bytes.fromhex(data)).digest()
hash2 = hashlib.sha256(hash1).hexdigest()
checksum = hash2[0:8]
data = data + checksum
characters = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
i = int(data, 16)
base58_str = ''
while i > 0:
i, remainder = divmod(i, 58)
base58_str = characters[remainder] + base58_str
return base58_str
start = 0x40000000000000000
end = 0x7ffffffffffffffff
quantidade = 1000000 # Quantidade de chaves a gerar
for _ in range(quantidade):
i = random.randint(start, end)
mini_private_key = f"S{'0' * (29 - len(hex(i)[2:]))}{hex(i)[2:]}"
sha256_hash = hashlib.sha256(mini_private_key.encode()).digest()
sha256_hash_hex = sha256_hash.hex()
hex_private_key = sha256_hash_hex
wif = hex_to_wif(hex_private_key)
generated_wif = private_key_to_wif(hex_private_key)
endereco_gerado = Key(generated_wif).address
if endereco_gerado == '1BY8GQbnueYofwSuFAT3USAhGjPrkxDdW9':
print(f"Mini Private Key: {mini_private_key}")
print(f"Hash SHA-256 (hex): {sha256_hash_hex}")
print("Chave WIF:", wif)
print(generated_wif)
print(endereco_gerado)
print('\n')
loop = asyncio.get_event_loop()
loop.run_until_complete(consulta_multipla_btc([endereco_gerado]))
Cuidados e recomendações
Este script é um exemplo técnico e não deve ser usado para gerar chaves privadas para carteiras reais sem conhecimento avançado. Manter a segurança das chaves privadas é fundamental para proteger seus ativos digitais.
Para projetos reais, utilize sempre bibliotecas confiáveis e seguras e nunca compartilhe suas chaves privadas ou frases mnemônicas.
Este conteúdo é apenas para fins educacionais. Avalie cuidadosamente os riscos antes de manipular ou investir em criptomoedas.