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

Como Codificar e Decodificar Base58 em Python: Guia Completo


@CanalQb no YouTube


@CanalQb

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.



Como Codificar e Decodificar Base58 em Python: Guia Completo

A codificação Base58 é amplamente utilizada em sistemas que precisam representar dados binários de forma compacta e amigável, especialmente no universo das criptomoedas, como Bitcoin. Este método evita caracteres ambíguos para melhorar a legibilidade, eliminando zeros à esquerda e caracteres confusos, como '0', 'O', 'I' e 'l'.

O que é Base58?

Base58 é um esquema de codificação que usa um conjunto de 58 caracteres específicos: números e letras que evitam caracteres visuais semelhantes para evitar confusões em transações financeiras, endereços de carteiras e chaves.

Os caracteres usados são:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Implementação em Python

A seguir, apresentamos um código completo em Python para codificação e decodificação Base58, baseado na implementação popular do python-bitcoinlib e testado com vetores de teste oficiais do draft Base58.

from binascii import hexlify

DIGITS = b'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'

def encode(bytestring):
    """
    Codificador Base58.

    Converte o bytestring inteiro para um inteiro e codifica em Base58.
    Preserva zeros à esquerda.
    """
    padding = DIGITS[0:1] * (len(bytestring) - len(bytestring.lstrip(b'\0')))
    try:
        number = int.from_bytes(bytestring, 'big')
    except AttributeError:
        number = int(hexlify(bytestring), 16)
    encoded = b''
    while number:
        number, remainder = divmod(number, 58)
        encoded += DIGITS[remainder:remainder + 1]
    return bytes(padding + encoded[::-1])

def decode(bytestring):
    """
    Decodificador Base58.

    Converte uma string Base58 de volta para bytes.
    Preserva zeros à esquerda.
    """
    clean = bytestring.lstrip(DIGITS[0:1])
    padding = b'\0' * (len(bytestring) - len(clean))
    number = 0
    try:
        for byte in clean:
            number = (number * 58) + DIGITS.index(byte)
    except IndexError:
        raise ValueError(f"{byte!r} não é um dígito válido em Base58")
    output = bytearray()
    while number:
        number, byte = divmod(number, 256)
        output.insert(0, byte)
    return bytes(padding + output)

Exemplos de Uso

  • encode(b'Hello World!') retorna b'2NEpo7TZRRrLZSi2U'
  • encode(b'The quick brown fox jumps over the lazy dog.') retorna uma string Base58 longa e segura
  • decode(encode(b'\x00\x00\x28\x7f\xb4\xcd')) retorna os bytes originais b'\x00\x00(\x7f\xb4\xcd'

Detalhes Técnicos Importantes

  • Preservação de zeros à esquerda para manter a integridade dos dados originais.
  • Uso do método int.from_bytes para converter o bytestring em número inteiro para codificação.
  • Exceções tratadas para garantir que somente caracteres válidos sejam decodificados.

Contexto e Aplicações

Base58 é essencial em sistemas de blockchain e criptomoedas para a criação de endereços públicos e chaves, garantindo que os dados possam ser compartilhados sem erros de digitação. Além disso, sua forma compacta ajuda a reduzir o tamanho das informações transmitidas.

Referências e Links Oficiais

Considerações Finais

Com este guia, você pode facilmente integrar codificação e decodificação Base58 em seus projetos Python, seja para sistemas financeiros, blockchain, ou outras aplicações que demandem alta confiabilidade e compactação segura de dados.

Comentários