Pular para o conteúdo

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.

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

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.

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 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.

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

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.

Buscar no Zolo

9 resultados

enespt-br