Cómo convertir Base64 a Base58
- Pega la cadena Base64 en Entrada · Base64. Funcionan tanto los caracteres estándar como los URL-safe, y también el relleno
=ausente, los saltos de línea y un prefijodata:. - Lee el resultado en Salida · Base58.
- Elige el Alfabeto bajo la salida si el destino no es Base58 al estilo Bitcoin. Flickr y Ripple ordenan los mismos 58 caracteres de otra manera.
- Usa Copiar salida, o haz clic en Base58 → Base64 en el selector de dirección para volver. La página Base58 a Base64 empieza en ese sentido.
La conversión pasa por los bytes en bruto: se decodifica el Base64 y los bytes se codifican en Base58. No se añade ni se quita nada, así que una clave de 32 bytes sigue siendo de 32 bytes.
Ejemplos
| Base64 | Base58 | Qué es |
|---|---|---|
SGVsbG8= | 9Ajdvzr | El texto Hello |
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= | 11111111111111111111111111111111 | 32 bytes cero: el System Program de Solana |
Bt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk= | TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | ID del programa SPL Token de Solana |
Bt324ddloZPZy-FGzut5rBy0he1fWzeROoz1hX7_AKk | TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | La misma clave en Base64 URL-safe sin relleno |
Las dos últimas filas son los mismos 32 bytes escritos de dos formas en Base64, así que ambas dan el mismo Base58.
Construir un CIDv0 de IPFS a partir de un digest SHA-256
Un CIDv0 es el Base58 de un multihash: los bytes 12 (SHA-256) y 20 (32 bytes de longitud) y después el digest. Muchas herramientas imprimen el digest SHA-256 en Base64, y convertirlo solo no da una cadena Qm…:
| Bytes | Base64 | Base58 |
|---|---|---|
| Solo el digest | JiqGtnblhp7dXRrfj/0B1inDFUv96uz8jPoNkOCILYo= | 3Zz6yE7jDUVDb6doCEWrK58or4X2TmTLBiJeyWY4NHvq |
12 20 + digest | EiAmKoa2duWGnt1dGt+P/QHWKcMVS/3q7PyM+g2Q4Igtig== | QmQudp5N7EzTxrBk3yESEKyEroMYNd7R22G2KWffwNZyzq |
El EiA del principio de la segunda cadena Base64 es el encabezado 12 20 codificado, así que un multihash en Base64 es fácil de reconocer. Para añadir tú el encabezado, convierte el digest con Base64 a hex, pon 1220 delante y codifica el hex en la página de Base58 con De en Hex.
Esto solo sirve si ya tienes el digest que calculó IPFS. IPFS calcula el hash del bloque UnixFS de un archivo, no del archivo en bruto, así que ejecutar sha256sum sobre un archivo no reproduce su CID.
Longitud: Base64 frente a Base58
| Bytes | Base64 | Base58 (datos aleatorios) |
|---|---|---|
| 16 | 24 | 21 o 22 |
| 20 | 28 | 26 a 28 |
| 32 | 44 | 43 o 44 |
| 64 | 88 | 87 u 88 |
La longitud en Base64 depende solo del número de bytes. La de Base58 depende también del valor, y por eso las direcciones de Solana varían entre 32 y 44 caracteres. No valides Base58 por longitud exacta.
La misma conversión en JavaScript
Node.js decodifica Base64 de forma nativa; la parte de Base58 necesita un BigInt:
const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
function base64ToBase58(b64) {
const bytes = Buffer.from(b64, "base64");
let n = BigInt("0x" + (bytes.toString("hex") || "0"));
let out = "";
while (n > 0n) {
out = ALPHABET[Number(n % 58n)] + out;
n /= 58n;
}
for (const b of bytes) {
if (b !== 0) break;
out = "1" + out;
}
return out;
}
base64ToBase58("Bt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk=");
// 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'
Buffer.from(…, "base64") también acepta entrada URL-safe. La función depende del Buffer de Node; Base64 en Node.js lo explica con más detalle.
Preguntas frecuentes
¿Puedo convertir Base64 a Base58 sin pasar por bytes?
No carácter a carácter. Base64 traduce grupos fijos de 6 bits, mientras que Base58 trata todos los bytes como un único número, así que cualquier convertidor, incluida esta página, decodifica primero el Base64 a bytes y vuelve a codificar esos bytes.
¿Por qué el resultado en Base58 a veces es más corto que el Base64?
Base58 no tiene relleno y cada byte cero inicial cuesta un carácter. 32 bytes son siempre 44 caracteres Base64 (con =), pero 43 o 44 en Base58, y solo 32 cuando todos los bytes son cero.
¿Qué alfabeto Base58 usa Solana?
El alfabeto de Bitcoin, que es el predeterminado aquí. Flickr y Ripple están en Alfabeto si los necesitas.
¿Por qué mi salida Base58 no empieza por Qm?
Qm viene del encabezado multihash de 2 bytes 12 20. Si tu Base64 contiene solo el digest SHA-256 de 32 bytes, antepón primero esos dos bytes, como se explica en esta página.