Codificador y Decodificador Base58

Paso 1 / 333%

Entrada


            

Base58 es una codificación de binario a texto pensada para evitar varios caracteres fáciles de confundir. El alfabeto de Bitcoin omite 0 O I l, además de + /; otros sistemas ordenan los mismos 58 símbolos de otra manera. Algunos ejemplos conocidos son las direcciones Bitcoin antiguas con Base58Check y las cadenas IPFS CIDv0. Esta herramienta funciona solo en el navegador, convierte texto UTF-8 o bytes hexadecimales exactos con el alfabeto de Bitcoin, Ripple o Flickr y rechaza los caracteres que no pertenecen al alfabeto elegido.

Cómo codificar y decodificar Base58

  1. 1

    Ingresa bytes o una cadena Base58

    La dirección de codificación acepta texto en hex o en bruto; la dirección de decodificación acepta Base58.

  2. 2

    Elige el alfabeto si es necesario

    El predeterminado es el Base58 de Bitcoin; variantes de Ripple y Flickr disponibles para compatibilidad.

  3. 3

    Ejecuta la conversión

    Base58 no se divide en grupos ordenados de 5 o 6 bits; se trata como un único entero big-endian, dividido por 58 repetidamente.

  4. 4

    Copia el resultado

    Las cadenas codificadas preservan los bytes cero iniciales como caracteres `1` iniciales (el glifo cero en el alfabeto de Bitcoin).

El alfabeto Base58 de Bitcoin

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Nota lo que falta: 0, O, I, l. El primer carácter en el alfabeto es 1, que representa el entero 0.

Cómo funciona realmente

A diferencia de Base64, que divide los bits en grupos fijos, Base58 trata toda la cadena de bytes como un único entero big-endian N y lo expresa en base 58:

result = []
while N > 0:
    result.prepend(alphabet[N mod 58])
    N = N / 58
for each leading zero byte in input:
    result.prepend(alphabet[0])  # es decir, '1'

Por eso la codificación Base58 no es trivial de transmitir: necesitas el número completo antes de poder emitir cualquier carácter.

Base58 vs Base58Check

La carga Base58Check típica de una dirección P2PKH antigua tiene 25 bytes: 1 byte de versión, 20 bytes de hash y 4 bytes de suma de comprobación. La suma son los primeros 4 bytes del doble SHA-256 de la versión y el hash. Al codificar la carga completa en Base58 se obtiene la cadena de dirección conocida.

Esta herramienta solo convierte Base58 simple. Usa un validador Base58Check específico cuando necesites comprobar la versión y la suma de una dirección.

Variantes de alfabeto

Variante Dónde se usa Diferencias con Bitcoin
Bitcoin Direcciones BTC, IPFS CIDv0 Base estándar
Ripple Direcciones XRP Posiciones intercambiadas
Flickr URLs cortas de fotos Minúsculas antes de mayúsculas

¿Por qué no usar solo Base64?

Base64 no tiene cambio de longitud entre texto binario y codificado (4 caracteres por 3 bytes), lo que es eficiente. Base58 tiene un sobrecosto ligeramente variable pero sin caracteres ambiguos, que es lo que deseas cuando alguien tiene que copiar una dirección a mano o leerla por teléfono.

Preguntas frecuentes

No universalmente. Base58 es mejor cuando los humanos manejan la cadena; Base64 es mejor cuando las máquinas la transportan. Base64 codifica 6 bits por carácter frente a los ~5.86 de Base58, por lo que Base64 es ligeramente más compacto.

Base58 codifica un gran entero, por lo que la longitud varía en uno o dos caracteres dependiendo de los bits de orden superior. Las direcciones P2PKH típicas tienen 34 caracteres, pero 33 es posible.

Puede decodificar la cadena a bytes sin procesar; elige la salida hexadecimal para conservar visibles los bytes arbitrarios. No comprueba la versión ni la suma de comprobación, así que decodificarla no demuestra que la dirección sea válida. Para eso necesitas un validador Base58Check.

Sí. Cada byte cero al inicio de la entrada se convierte en un carácter 1 en la salida, que es como funcionan las direcciones de Bitcoin que comienzan con 1.

Herramientas relacionadas