Cómo codificar y decodificar Base58Check
Para codificar:
- Pega el hex en Entrada · Hex: primero el byte de versión y después la carga útil. Se aceptan espacios, dos puntos y prefijos
0x. - Lee el resultado en Salida · Base58Check. La herramienta calcula la suma de comprobación y la añade antes de codificar.
- Deja el Alfabeto en Bitcoin para Bitcoin y la mayoría de sus bifurcaciones.
Para decodificar, haz clic en Base58Check → Hex en el selector de dirección y pega la dirección o la clave. El decodificador la convierte, vuelve a calcular la suma de comprobación y devuelve la carga útil (que sigue empezando por el byte de versión) solo si coinciden los 4 bytes de la suma. Un solo carácter mal escrito da «la suma de comprobación no coincide: la cadena está mal escrita o dañada».
Qué añade Base58Check a Base58
El Base58 simple no detecta errores: una errata da otra cadena igual de válida. Base58Check lo resuelve con dos añadidos:
version (1 byte) | payload | first 4 bytes of SHA-256(SHA-256(version | payload))
Después, todo se codifica en Base58, así que los bytes cero iniciales se convierten en 1. El byte de versión indica la red y el tipo de datos, y como va al principio del número, también fija el primer carácter del resultado.
Bytes de versión y prefijos
El mismo hash de 20 bytes, 62e907b15cbf27d5425399ebf6f0fb50ebb88f18, con distintos bytes de versión:
| Versión | Significado | Primer carácter | Resultado |
|---|---|---|---|
00 | Dirección Bitcoin P2PKH | 1 | 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa |
05 | Dirección Bitcoin P2SH | 3 | 3Ai1JZ8pdJb2ksieUV8FsxSNVJCpoPi8W6 |
6f | Dirección P2PKH de testnet | m o n | mpXwg4jMtRhuSpVq4xS3HFHmCmWp9NyGKt |
c4 | Dirección P2SH de testnet | 2 | 2N2GDNJ4rEm6NxfMC9ck8VuRdheQzXWaNZv |
La primera fila es la dirección que recibió la recompensa del bloque génesis de Bitcoin. Las demás filas solo ilustran el byte de versión: envolver el hash de una clave pública en un byte de versión P2SH no da una dirección P2SH utilizable, porque P2SH es el hash de un script.
Claves privadas WIF
Wallet Import Format es Base58Check con el byte de versión 80 y una clave privada de 32 bytes. Un byte 01 al final marca una clave cuya clave pública se usa en forma comprimida. Con la conocida clave de ejemplo de la wiki de Bitcoin:
| Entrada hex | Base58Check |
|---|---|
80 + 0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D | 5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ |
lo mismo + 01 | KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617 |
Las claves WIF sin comprimir empiezan por 5, y las comprimidas por K o L. Esta clave de ejemplo es pública; no la uses nunca para fondos reales.
Base58Check en Python
La suma de comprobación son dos llamadas a SHA-256 de la biblioteca estándar. Con un pequeño codificador Base58:
import hashlib
ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
def b58encode(data: bytes) -> str:
n = int.from_bytes(data, "big")
out = ""
while n:
n, r = divmod(n, 58)
out = ALPHABET[r] + out
zeros = len(data) - len(data.lstrip(b"\0"))
return "1" * zeros + out
def b58check(payload: bytes) -> str:
checksum = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4]
return b58encode(payload + checksum)
b58check(bytes.fromhex("0062e907b15cbf27d5425399ebf6f0fb50ebb88f18"))
# '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'
Para verificar una cadena en código, decodifícala con Base58, separa los últimos 4 bytes y compáralos con el doble hash del resto. Hay más manejo de bytes en Python en la página de Python.
Problemas habituales
- La suma de comprobación no coincide. La cadena tiene una errata, está cortada o es Base58 simple sin suma de comprobación (las direcciones de Solana y los hashes de IPFS son Base58 simple; para ellos usa el decodificador Base58).
- «Demasiado corto para contener la suma de comprobación de 4 bytes». El valor decodificado tiene menos de 4 bytes, así que no puede ser Base58Check.
- Carácter inesperado
"0","O","I"o"l". No está en el alfabeto Base58; revisa la transcripción. - Primer carácter incorrecto tras codificar. Revisa el byte de versión. Sin él, un hash de 20 bytes suele codificarse en una cadena que no empieza por
1.
Preguntas frecuentes
¿Cómo se calcula la suma de comprobación de Base58Check?
Se calcula el SHA-256 de la carga útil (byte de versión incluido), luego el SHA-256 del resultado, y se toman los 4 primeros bytes. Esos 4 bytes se añaden antes de la codificación Base58.
¿Una suma de comprobación válida significa que es seguro enviar a esa dirección?
Significa que la cadena no se escribió mal: una errata al azar pasa con una probabilidad de alrededor de 1 entre 4300 millones. No dice nada de quién controla la dirección ni de si pertenece a la red que crees.
¿Base58Check puede decodificar direcciones bc1?
No. Las direcciones que empiezan por bc1 son Bech32 o Bech32m (SegWit y Taproot), que usan otro alfabeto y otra suma de comprobación.
¿Debo pegar aquí una clave privada real?
La conversión se hace en tu navegador y la página bloquea todas las peticiones de red salvo las del contador de visitas de Cloudflare, pero una clave WIF controla fondos. Usa una clave de prueba, o un equipo sin conexión, para cualquier cosa que tenga valor.