Base64, Hex y Base32 (std::base64)
En esta página
Cuando los bytes deben transportarse en contextos que solo aceptan texto — JSON,
URLs, correo MIME — utiliza las codificaciones binarias de la stdlib. std::base64
cubre el alfabeto estándar y el URL-safe; std::hex y std::base32 completan
las alternativas más comunes. Todos los ejemplos son cómputos puros y se ejecutan
en el sandbox.
Encode y decode estándar
base64.encode convierte una cadena a Base64 con relleno =. base64.decode
revierte la operación. La tabla de relleno para cadenas de 1, 2 y 3 bytes ilustra
la alineación en bloques de cuatro caracteres.
Codificación estándar con relleno y decodificación de vuelta a la cadena original.
// Feature: base64.encode / base64.decode — encode binary into ASCII text
// When to use: embed bytes in JSON, in URLs, in emails (MIME).
use std::base64
let raw = "hello, zolo!"
let enc = base64.encode(raw)
print(enc) // expected: aGVsbG8sIHpvbG8h
// decode reverses. Note: decode returns a string (interpreted as UTF-8).
let back = base64.decode(enc)
print(back) // expected: hello, zolo!
// Padding `=` is included by default in the standard variant.
print(base64.encode("a")) // expected: YQ==
print(base64.encode("ab")) // expected: YWI=
print(base64.encode("abc")) // expected: YWJj
Variante URL-safe
El alfabeto estándar usa +, / y =, que tienen significado especial en
URLs. base64.encode_url reemplaza + por -, / por _ y omite el relleno
— el resultado puede ir directamente en una query string o en un JWT.
Comparación entre encode estándar y encode_url para uso seguro en URLs.
// Feature: base64.encode_url — URL-safe variant (no +, /, =)
// When to use: tokens in query strings, JWT-like payloads, file names.
// Differences: uses - instead of + and _ instead of /, no = padding.
use std::base64
let raw = "subjects?id=42&active=true"
let std = base64.encode(raw)
let url = base64.encode_url(raw)
print(std) // expected: contains + or /, ends with =
print(url) // expected: uses - or _, no =
// Standard base64 can break URLs because of +, / and =.
// The URL-safe variant is safe to put in a query string without extra encoding.
Hex y Base32
std::hex produce dos caracteres en minúsculas por byte — fácil de leer en
logs y depuradores. std::base32 usa el alfabeto Crockford (5 bits por
carácter) sin los caracteres ambiguos 0/O y 1/I, lo que lo hace adecuado
para identificadores legibles por humanos.
Hex encoding/decoding y Base32 con decode_string de vuelta al original.
// Feature: hex / base32 — alternative encodings
// When to use:
// hex -> debug, fingerprints, human-readable hashes
// base32 -> short identifiers without ambiguity (no 0/O, 1/I)
use std::hex
use std::base32
// hex.encode produces a string with 2 chars per byte.
let raw = "hello"
print(hex.encode(raw)) // expected: 68656c6c6f
// hex.decode returns an array of bytes; decode_string reassembles the string.
print(hex.decode_string("68656c6c6f")) // expected: hello
// base32 — Crockford alphabet (5 bits per char).
let b32 = base32.encode("zolo")
print(b32) // expected: PJXWQZ3R (or similar — RFC 4648)
print(base32.decode_string(b32)) // expected: zolo
Desafío
Combina std::hash.sha256 con std::hex para mostrar la huella de una cadena
en el formato sha256:<hex>, replicando el estilo de digest de imágenes Docker.
Consulta también