Cómo convertir Base58 a Base64
- Pega la cadena Base58 en Entrada · Base58. Los saltos de línea y los espacios se ignoran.
- Si no usa el alfabeto de Bitcoin, cambia el Alfabeto bajo la entrada a Flickr o Ripple.
- Lee el Base64 en Salida · Base64. Bajo la salida, desmarca Relleno (=) para obtener Base64 sin relleno, o pon el Ajuste de línea en 64 o 76 columnas.
- Pulsa Copiar salida, o usa Base64 → Base58 en el selector de dirección para el camino inverso; la página Base64 a Base58 empieza en esa dirección.
Los contadores bajo la herramienta muestran la longitud de entrada, el número de Bytes decodificados y la longitud de salida. El número de bytes es la forma más rápida de comprobar que pegaste la clave entera: 32 para una clave pública de Solana, 64 para una firma o un par de claves, 34 para un CIDv0 de IPFS.
Ejemplos
| Base58 | Base64 | Bytes |
|---|---|---|
9Ajdvzr | SGVsbG8= | 5, el texto Hello |
11111111111111111111111111111111 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= | 32 bytes cero |
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | Bt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk= | 32, programa SPL Token de Solana |
QmQudp5N7EzTxrBk3yESEKyEroMYNd7R22G2KWffwNZyzq | EiAmKoa2duWGnt1dGt+P/QHWKcMVS/3q7PyM+g2Q4Igtig== | 34, CIDv0 de IPFS |
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa | AGLpB7FcvyfVQlOZ6/bw+1DruI8Ywpt9kw== | 25, dirección Bitcoin con suma de comprobación |
Todo CIDv0 se convierte en un Base64 que empieza por EiA: es la cabecera multihash 12 20 (SHA-256, 32 bytes). Quita los dos primeros bytes y tendrás el resumen solo, tal como lo imprime una herramienta SHA-256.
Por qué los datos de Solana aparecen en las dos codificaciones
Solana muestra las claves públicas, los ID de programa y las firmas de transacciones en Base58 en monederos y exploradores. Su API JSON-RPC, en cambio, acepta transacciones serializadas en Base64 o Base58 y marca Base58 como la opción lenta y obsoleta. Los datos de las cuentas llegan en Base64 cuando pides esa codificación. Así que la misma clave de 32 bytes puede aparecer en Base58 en un sitio y dentro de un Base64 en otro.
La conversión no cambia los bytes, lo que la convierte en una forma segura de comparar dos valores: si una clave Base58 y una clave Base64 dan aquí el mismo Base64, son la misma clave.
De Base58 a Base64 en Python
La biblioteca estándar tiene Base64 pero no Base58, así que la primera mitad es un bucle corto:
import base64
ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
def base58_to_base64(s: str) -> str:
n = 0
for ch in s:
n = n * 58 + ALPHABET.index(ch)
body = n.to_bytes((n.bit_length() + 7) // 8, "big")
zeros = len(s) - len(s.lstrip("1"))
return base64.b64encode(b"\0" * zeros + body).decode()
base58_to_base64("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
# 'Bt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk='
ALPHABET.index lanza ValueError con caracteres fuera de Base58, como 0 o l. Hay más sobre Base64 en Python en la página de Python.
Problemas habituales
- Falta un byte. El convertidor que usaste antes eliminó un byte cero inicial. Esta página los conserva; compara las salidas.
- Error en un
0,O,Iol. Esos caracteres no son Base58. Busca un error al copiar o de OCR. - La entrada empieza por
bc1,0xobafy. Son Bech32, hex y Base32 (CIDv1 de IPFS) respectivamente, no Base58. Para un CIDv1, el decodificador Base32 explica cómo leerlo. - La salida tiene 4 bytes más de lo esperado. La cadena era Base58Check y la suma de comprobación sigue incluida.
Preguntas frecuentes
¿Cómo convierto una clave pública de Solana a Base64?
Pega la dirección en la entrada. Una clave pública de Solana válida se decodifica exactamente en 32 bytes, así que la salida Base64 siempre tiene 44 caracteres y termina en un =, o 43 sin relleno.
¿Por qué el Base64 empieza por A?
La entrada Base58 empezaba por 1, que se decodifica como un byte cero. Base64 toma su primer carácter de los primeros 6 bits, y seis bits a cero son A. Por eso la dirección Bitcoin 1A1zP1… se convierte en AGLp….
¿Cómo obtengo Base64 URL-safe?
Copia el resultado en Base64 a Base64URL, que cambia + y / por - y _ y quita el relleno. Desmarca Relleno (=) aquí si solo necesitas quitar el =.
¿La salida cambia con cadenas Base58Check?
La conversión es la misma, pero entonces el Base64 incluye el byte de versión y la suma de comprobación de 4 bytes. Decodifica primero con la herramienta Base58Check si solo quieres la carga útil.