1001Ferramentas
🔢Geradores

Gerador de Bytes Aleatórios

Gera bytes aleatórios em hex, base64 ou binário — usando crypto.getRandomValues do navegador. Para chaves, salts e tokens criptograficamente seguros.


  

Bytes aleatórios — bloco fundamental da criptografia

Quase toda operação criptográfica começa com um punhado de bytes aleatórios: chaves simétricas, salts, nonces, vetores de inicialização, tokens de sessão, magic links, códigos de redefinição de senha e handshakes TLS dependem da qualidade da aleatoriedade que está embaixo. A saída desta ferramenta vem de um CSPRNG (Cryptographically Secure Pseudo-Random Number Generator), a única família de geradores segura para fins sensíveis. A fonte exata varia conforme o runtime: crypto.getRandomValues da Web Crypto API no navegador, crypto.randomBytes no Node.js, secrets.token_bytes em Python, java.security.SecureRandom em Java, OS_genrandom via libsodium e /dev/urandom em Linux/Unix. No fim, todos puxam do entropy pool do sistema operacional — o mesmo pool que o kernel alimenta com eventos de hardware, RDRAND, timing de interrupções e outras fontes imprevisíveis.

É crítico entender que Math.random() não é um CSPRNG. Historicamente os navegadores usaram algoritmos como xorshift128+ e devolvem ~52 bits de entropia de ponto flutuante com viés detectável — ótimo para animação e dado de jogo, catastrófico para cripto. O conselho antigo de ler /dev/random (bloqueante) em vez de /dev/urandom não vale mais nos kernels Linux modernos: uma vez que o pool foi semeado no boot, ambos produzem saída igualmente forte. NIST SP 800-90A e 800-90B são os documentos de referência descrevendo construções aprovadas (CTR_DRBG, HMAC_DRBG, Hash_DRBG).

Codificações — hex, base64, base64url e companhia

Bytes aleatórios são binários; humanos e protocolos quase sempre precisam de uma representação textual. As codificações mais comuns são:

  • hex — 2 caracteres por byte, alfabeto 0-9a-f, case-insensitive. Fácil de comparar a olho e de fazer diff. Overhead de 100%. Exemplo: 0a1b2c3d.
  • base64 — 4 caracteres a cada 3 bytes (~33% de overhead), alfabeto A-Za-z0-9+/ com padding =. Padrão em MIME, payloads de JWT e arquivos PEM.
  • base64url — variante da RFC 4648 §5: + vira -, / vira _, padding normalmente removido. Segura em URLs, cookies e nomes de arquivo. É o formato dos cabeçalhos e assinaturas JWT.
  • base32 — 5 bits por caractere, RFC 4648 §6. Case-insensitive e sem pares ambíguos. Usada em chaves TOTP, endereços onion v3 e alguns QR codes.
  • base58 — alfabeto do Bitcoin/IPFS, sem os caracteres visualmente ambíguos 0, O, I e l.

Quantos bytes são suficientes?

A entropia se mede em bits. Cada byte contribui 8 bits, então 16 bytes = 128 bits e 32 bytes = 256 bits. Regras práticas em 2026:

  • 128 bits (16 bytes) — mínimo moderno para chaves AES-128, salts de bcrypt, cookies de sessão, tokens CSRF, links de redefinição de senha.
  • 192 bits (24 bytes) — chaves AES-192, tokens conservadores.
  • 256 bits (32 bytes) — AES-256, chaves HMAC-SHA256, tokens de API de longa duração, qualquer caso em que 2^128 de orçamento de força bruta pareça pouca margem.
  • 12 bytes — tamanho típico de nonce/IV de GCM.
  • 16 bytes — tamanho típico de IV de CBC.

Pegadinhas comuns

  • Reutilizar IV/nonce com a mesma chave em CTR/GCM quebra a confidencialidade e (em GCM) destrói a integridade — gere um nonce aleatório novo a cada criptografia.
  • VMs e containers recém-iniciados antigamente subiam com entropy pool vazio — kernels modernos mitigam com RDRAND/jitter, mas snapshots AMI antigos ainda podem dar problema.
  • Truncar um hex de 32 bytes "para ficar mais bonito" corta o nível de segurança pela metade a cada byte removido.
  • Nunca semeie um CSPRNG manualmente com Date.now() ou user agent — deixe o SO fazer isso.

Perguntas frequentes

Como sei se uma função é CSPRNG? Se ela mora no módulo crypto/secrets da biblioteca padrão da sua linguagem, é. Se mora em Math, random, rand() ou algo terminado em _r, não é — são PRNGs determinísticos para simulação.

Hex ou base64? Use hex quando humanos vão ler ou transcrever o valor. Use base64url quando o valor vai para URL, cookie, campo JSON ou nome de arquivo — fica 25% mais curto e é URL-safe.

16 bytes bastam mesmo para um token de sessão? Sim. 128 bits de aleatoriedade real é mais do que a memória de trabalho de todo o planeta junto pelas próximas décadas. Se seu modelo de ameaça inclui Estado-nação com hardware quântico em 2050, suba para 32 bytes.

A ferramenta envia meus bytes para o servidor? Não. Os bytes são gerados inteiramente no seu navegador via window.crypto.getRandomValues — nada sai do seu dispositivo.

Ferramentas Relacionadas