Codificador y Decodificador Base58 | Verifica direcciones de Bitcoin y Base58Check sin salir del navegador
Cuando necesitas convertir un hash hex en una dirección P2PKH de Bitcoin, comprobar si tu propia implementación de Base58Check coincide con la oficial, o desmontar una clave de Solana o un CIDv0 de IPFS para inspeccionar los bytes — esta herramienta codifica y decodifica Base58 estilo Bitcoin con cinco plantillas de byte de versión (P2PKH 0x00, P2SH 0x05, WIF 0x80, Testnet P2PKH 0x6f, Testnet P2SH 0xc4) y calcula el veredicto de checksum doble SHA-256 dentro de la pestaña, usando BigInt y Web Crypto.
💡 Sobre esta herramienta
El alfabeto Base58 de Bitcoin se diseñó para que las direcciones fueran legibles por humanos. Satoshi eliminó cuatro caracteres — 0, O mayúscula, I mayúscula y l minúscula — porque se confunden en papel, en lecturas OCR de QR borrosos y al dictar una dirección por teléfono. También se quedaron fuera los símbolos +, / y =, así que el resultado entra en URLs, argumentos de línea de comandos y JSON sin necesidad de escape.
Base58Check añade un byte de versión al principio y un checksum de cuatro bytes (los primeros cuatro bytes de SHA256(SHA256(versión || payload))) para detectar erratas antes de que lleguen a una cartera o un cliente RPC. Esa misma envoltura aparece en direcciones de Bitcoin mainnet y testnet, claves WIF (Wallet Import Format), claves públicas de Solana (Base58 simple, sin checksum), CIDv0 de IPFS (Qm…) y los IDs antiguos de fotos de Flickr.
La herramienta separa los dos flujos. El codificador acepta una cadena hex de bytes, antepone opcionalmente un byte de versión y genera la cadena Base58 / Base58Check canónica. El decodificador hace el camino inverso: muestra el byte de versión por separado, presenta el payload en hex y ASCII imprimible, y dice si el checksum cuadra con los bytes que pegaste. Todo se ejecuta con BigInt y crypto.subtle.digest('SHA-256', …), así que el resultado coincide con python-base58, btcutil/base58, rust-bitcoin y bitcoinjs-lib.
Privacidad: WIF (0x80) puede contener claves privadas. Los bytes que pegas no se envían a un servidor — todo el cálculo BigInt y SHA-256 ocurre dentro de la página.
🧐 Preguntas Frecuentes
Q. ¿En qué se diferencia Base58 de Base64?
A. Base64 usa 64 caracteres (A-Z a-z 0-9 + / =); Base58 quita 0, O, I, l y los signos, dejando 58. La salida es aproximadamente un 4% más larga que Base64, pero queda apta para URLs, copy-paste y lectura en voz alta sin generar confusión.
Q. ¿Cómo se calcula el checksum de Base58Check? A. Se concatena el byte de versión con el payload, se aplica SHA-256 dos veces y se toman los primeros cuatro bytes del segundo hash. El decodificador repite el cálculo sobre los bytes que extrajo y compara los cuatro últimos con el valor que recalcula. Cualquier bit cambiado modifica el checksum de forma drástica, así que una sola errata casi siempre falla la verificación.
Q. ¿Puedo manejar Litecoin, Dogecoin, Solana o IPFS CIDv0 aquí?
A. Las claves de Solana y los CIDv0 de IPFS son Base58 simple — cambia al modo "Base58 sin verificación" y los bytes se reconstruyen tal cual. Litecoin (0x30 P2PKH, 0x05/0x32 P2SH) y Dogecoin (0x1e) sí usan Base58Check, pero con bytes de versión fuera de las plantillas; lo más práctico es construir versión + payload + double_sha256(versión + payload)[:4] en tu propio script y pegar el resultado hex aquí para comparar.
Q. El veredicto dice "checksum inválido". ¿Qué reviso?
A. Tres causas habituales. Primero, en algún punto de la cadena se coló un O en lugar de 0 o una I en lugar de l — Base58 no admite esos caracteres y el decodificador lanza error antes de llegar al checksum. Segundo, un editor convirtió caracteres tipográficos (comillas inteligentes, ancho completo). Tercero, lo que pegaste es Base58 simple (Solana, IPFS CIDv0) y estás intentando leerlo como Base58Check; cambia de modo.
Q. Mi clave WIF decodificada tiene 33 bytes en lugar de 32. ¿Es correcto?
A. Sí. Las claves WIF de tipo "compressed" añaden un byte 0x01 al final para indicar que la clave pública correspondiente está en formato comprimido. WIF "uncompressed" da exactamente 32 bytes. Puedes distinguir las dos formas mirando la longitud del payload hex.
📚 Datos Curiosos
El alfabeto Base58 empieza por 1 y no por 0 a propósito. El codificador de Bitcoin representa cada byte cero inicial como un 1 literal, y por eso las direcciones P2PKH de mainnet (byte de versión 0x00) empiezan por 1, las P2SH (0x05) por 3 y las WIF uncompressed (0x80) por 5. Las WIF compressed empiezan por K o L porque el byte adicional 0x01 desplaza el rango numérico más allá de 5….
Flickr usaba un alfabeto Base58 con orden propio (1…9 a-z A-Z sin las exclusiones tradicionales), así que un enlace https://flic.kr/p/2nABcDef no decodifica directamente contra el alfabeto de Bitcoin. Solana, Stellar e IPFS sí adoptaron el orden de Bitcoin, y comparten decodificadores sin remapeos — los documentos originales de go-ipfs incluso lo etiquetaban como alfabeto "btc".