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

Python - Puzzle 1000 Bitcoin - Como comparar endereços Bitcoin ignorando maiúsculas e minúsculas


@CanalQb no YouTube


@CanalQb

Python - Puzzle 1000 Bitcoin - Como comparar endereços Bitcoin ignorando maiúsculas e minúsculas


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



Como comparar endereços Bitcoin ignorando maiúsculas e minúsculas no Python

Endereços Bitcoin são case-sensitive, ou seja, diferenciam letras maiúsculas de minúsculas. Porém, em alguns casos, como ao trabalhar com ferramentas automatizadas em Python ou ao buscar possíveis correspondências visuais, pode ser útil realizar uma comparação que ignore a diferença entre letras maiúsculas e minúsculas.

Este artigo explica como aplicar essa lógica de forma prática e segura, utilizando a biblioteca bit para gerar e manipular chaves e endereços Bitcoin.

1. Solução direta: comparação ignorando maiúsculas/minúsculas

Esta é a forma mais simples. Quando você carregar os endereços-alvo, crie um novo conjunto com todos os endereços convertidos para letras minúsculas. Depois, ao gerar um endereço usando bit.Key, compare o valor em minúsculas com o conjunto normalizado.

# Exemplo: comparação case-insensitive com 'bit'
from bit import Key

# Lista de endereços-alvo
enderecos_fixos = {
    "1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU",
}

# Cria versão normalizada (tudo em lower)
enderecos_fixos_lower = set(a.lower() for a in enderecos_fixos)

# Gera uma nova chave
k = Key()  # Gera uma chave nova aleatória
addr = k.address  # Endereço gerado

# Comparação ignorando case
if addr.lower() in enderecos_fixos_lower:
    print("Match (case-insensitive):", addr)
else:
    print("No match:", addr)

Você pode integrar essa lógica no seu scanner atual substituindo a linha:

if addr in targets_set:

por:

if addr.lower() in targets_lower_set:

2. Como integrar ao seu script atual

Dentro do seu script Python maior, depois de carregar os endereços (de um arquivo, API ou lista fixa), adicione este trecho:

# Após carregar os endereços
if targets is None:
    targets = enderecos_fixos  # Fallback

# Flag de controle
CASE_INSENSITIVE = True

# Normaliza os alvos, se necessário
if CASE_INSENSITIVE:
    targets_normalized = set(a.lower() for a in targets)
else:
    targets_normalized = set(targets)

# Ao verificar se há correspondência:
check_value = addr.lower() if CASE_INSENSITIVE else addr
if check_value in targets_normalized:
    print("Endereço encontrado!")

Opcionalmente, exponha a variável CASE_INSENSITIVE como uma flag de linha de comando (ex: --ignore-case).

3. Aviso técnico importante

Embora comparar .lower() possa parecer útil visualmente, tecnicamente isso pode levar a falsos positivos. Isso ocorre porque os endereços Bitcoin usam Base58Check, e essa codificação diferencia letras maiúsculas de minúsculas.

Ou seja, alterar a caixa (case) de um caractere altera o hash subjacente e o checksum. Por isso, dois endereços que parecem iguais quando convertidos para minúsculas podem, na verdade, representar chaves públicas completamente diferentes.

Portanto, se seu objetivo for encontrar uma correspondência real e válida, não utilize comparação case-insensitive. O ideal, nesse caso, é:

  • Validar os endereços (verificar o checksum Base58Check);
  • Comparar exatamente os bytes decodificados;
  • Evitar depender de visualizações visuais (como diferença apenas de "A" vs "a").

Mas, se sua intenção é apenas detectar similaridades visuais ou compensar erros humanos (como digitar uma letra errada com caixa trocada), a estratégia com .lower() pode ser usada com cautela.

4. Exemplo de uso no mundo real

Você está buscando encontrar o endereço:

1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs

Mas um script pode retornar:

1PMycacnJaSqwwJqjawXBErnLsZ7RkXUas

Nesse caso, a única diferença está no último caractere (“A” vs “a”). Aparentemente são iguais, mas são endereços completamente diferentes na blockchain.

Comparar ignorando case neste contexto vai gerar um falso positivo perigoso, caso o script conclua que encontrou o endereço verdadeiro. Portanto, a decisão de ignorar maiúsculas e minúsculas deve ser feita com entendimento do risco.

5. Conclusão

Usar .lower() para comparar endereços Bitcoin pode ser útil para buscas visuais ou testes, mas é tecnicamente incorreto para fins de verificação criptográfica ou transacional. Para escaneamento de carteiras reais, sempre priorize a verificação exata do endereço ou do hash decodificado da chave pública.

Se você está desenvolvendo ferramentas com Python para análise de endereços Bitcoin, considere implementar validações de checksum Base58 e, se possível, mantenha registros de qualquer correspondência case-insensitive para posterior auditoria.

Referências úteis

Nota: Este conteúdo tem finalidade educacional. Antes de realizar testes ou buscar carteiras reais, é importante entender profundamente como funcionam as chaves privadas, públicas e os endereços Bitcoin. Não invista tempo ou dinheiro em algo que você não compreende completamente.

Comentários