Este blog é um complemento do nosso canal no YouTube. Clique em @CanalQb para seguir e acompanhar nossos vídeos!

Sugestões de pesquisas

Gerador de Chaves Privadas Bitcoin e Consulta de Saldo com Python

#bitcoin; #criptografia; #python

@CanalQb no YouTube


@CanalQb

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 e asyncio — para consultas HTTP assíncronas e eficiente gerenciamento de múltiplas requisições.
  • hashlib e base58 — 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.

Links oficiais úteis

Postar um comentário

Comente só assim vamos crescer juntos!
CanalQb mais próximo Quer falar com o CanalQb?
Em que posso te ajudar?
Fale comigo