Verificação de Acesso

Carregando...

Formulário de contato

Nome

E-mail *

Mensagem *

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

Imagem

Gerando e Exportando Intervalos de Chaves Bitcoin com Python


@CanalQb no YouTube


@CanalQb

Gerando e Exportando Intervalos de Chaves Bitcoin com Python


Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.



Como Gerar e Dividir Intervalos de Chaves Bitcoin com Python

Em projetos relacionados à blockchain, especialmente no estudo de carteiras e chaves privadas de Bitcoin, é comum precisar calcular grandes volumes de endereços possíveis. Este artigo mostra como dividir de forma inteligente esses intervalos utilizando Python e bibliotecas como psutil e csv, de forma eficiente e segura.

O que este script faz?

O código abaixo realiza as seguintes tarefas:

  • Calcula a quantidade de endereços possíveis dentro de um intervalo com 69 bits de entropia.
  • Divide o intervalo total em blocos menores de endereços.
  • Verifica a memória RAM disponível para operação.
  • Imprime os blocos gerados e limpa a memória após cada bloco.
  • Exporta os blocos para um arquivo enderecos_blocos.csv.

Exemplo de aplicação

Suponha que você deseje explorar um espaço de endereços privados começando em 295147905179352825856 até 590295810358705651711. Isso representa aproximadamente 2⁶⁹ endereços possíveis. Com este script, você pode dividi-los em blocos de 1 quatrilhão para facilitar a análise paralela ou o armazenamento.

Pré-requisitos

Instale o módulo psutil caso ainda não esteja disponível:

pip install psutil

Código Python completo

import psutil
import gc
import csv

def calcular_enderecos_possiveis(inicio, fim):
    num_enderecos = fim - inicio + 1
    print(f"Existem {num_enderecos} endereços possíveis com 69 bits de entropia.")
    return num_enderecos

def dividir_blocos(inicio, fim, tamanho_bloco):
    num_enderecos = fim - inicio + 1
    blocos = []
    num_blocos = num_enderecos // tamanho_bloco
    if num_enderecos % tamanho_bloco != 0:
        num_blocos += 1

    for i in range(num_blocos):
        bloco_inicio = inicio + i * tamanho_bloco
        bloco_fim = bloco_inicio + tamanho_bloco - 1
        if bloco_fim > fim:
            bloco_fim = fim
        blocos.append((bloco_inicio, bloco_fim))
    
    return blocos

def imprimir_blocos(blocos):
    for i, bloco in enumerate(blocos):
        bloco_inicio, bloco_fim = bloco
        print(f"Bloco {i+1}: Endereços de {bloco_inicio} a {bloco_fim}")
        gc.collect()

def salvar_em_csv(blocos, arquivo_csv):
    with open(arquivo_csv, mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["Bloco", "Inicio", "Fim"])
        for i, bloco in enumerate(blocos):
            writer.writerow([i+1, bloco[0], bloco[1]])
    print(f"\n[+] Blocos salvos no arquivo {arquivo_csv}")

def main():
    inicio = int(295147905179352825856)
    fim = int(590295810358705651711)
    tamanho_bloco = 10**15

    memoria_disponivel = psutil.virtual_memory().available
    memoria_disponivel_mb = memoria_disponivel / (1024 ** 2)
    
    print(f"\n[+] Estimativa de memória disponível: {memoria_disponivel_mb:.2f} MB")
    print(f"[+] Dividindo os endereços entre {inicio} e {fim} em blocos de {tamanho_bloco} endereços.")

    calcular_enderecos_possiveis(inicio, fim)
    blocos = dividir_blocos(inicio, fim, tamanho_bloco)
    imprimir_blocos(blocos)
    salvar_em_csv(blocos, "enderecos_blocos.csv")

if __name__ == "__main__":
    main()

Resultado esperado

Ao executar o código, o terminal exibirá os blocos gerados com seus intervalos e, ao final, criará um arquivo enderecos_blocos.csv contendo:

Bloco,Inicio,Fim
1,295147905179352825856,296147905179352825855
2,296147905179352825856,297147905179352825855
...

Importante

Este conteúdo tem fins educacionais e técnicos. Nenhum processo de geração ou varredura de chaves privadas deve ser utilizado para fins não autorizados. Analise cuidadosamente qualquer abordagem envolvendo criptografia e blockchain antes de aplicar recursos financeiros. Não invista tempo ou dinheiro sem entendimento técnico apropriado.

Links úteis

Comentários