Saltar al contenido

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.

01-encode-decode.zolo
Playground
// 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.

02-url-safe.zolo
Playground
// 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.

03-hex-base32.zolo
Playground
// 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.

Buscar en Zolo

9 resultados

enespt-br