Base64, Hex e Base32 (std::base64)
Nesta página
Quando bytes precisam ser transportados em contextos que só aceitam texto — JSON,
URLs, e-mail MIME — use as codificações binárias da stdlib. std::base64 cobre
o alfabeto padrão e o URL-safe; std::hex e std::base32 completam as
alternativas mais comuns. Todos os exemplos são computações puras e rodam no
sandbox.
Encode e decode padrão
base64.encode converte uma string em Base64 com padding =. base64.decode
reverte a operação. A tabela de padding para strings de 1, 2 e 3 bytes ilustra
o alinhamento em blocos de quatro caracteres.
Codificação padrão com padding e decodificação de volta à string 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
O alfabeto padrão usa +, / e =, que têm significado especial em URLs.
base64.encode_url substitui + por -, / por _ e omite o padding —
o resultado pode ir diretamente numa query string ou num JWT.
Comparação entre encode padrão e encode_url para uso seguro em 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 e Base32
std::hex produz dois caracteres por byte em minúsculas — fácil de ler em logs
e depuradores. std::base32 usa o alfabeto Crockford (5 bits por char) sem os
caracteres ambíguos 0/O e 1/I, tornando-o adequado para identificadores
legíveis por humanos.
Hex encoding/decoding e Base32 com decode_string de volta ao 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
Desafio
Combine std::hash.sha256 com std::hex para exibir o fingerprint de uma
string no formato sha256:<hex>, replicando o estilo de digest de imagens Docker.
Veja também