1001Ferramentas
🎲 Geradores

Gerador de String Aleatória

Gere strings aleatórias customizáveis — defina alfabeto (A-Z, a-z, 0-9, hex, base32, base58, símbolos), tamanho e quantidade. Útil para tokens, IDs e fixtures. Tudo no navegador.

Quando você quer só uma string aleatória

Uma string aleatória é a primitiva genérica que mora abaixo de identificadores mais estruturados como UUIDs, ULIDs e nanoids. Esses têm forma fixa, alfabeto definido e uma especificação contra a qual validar. Uma string aleatória pura é só N caracteres tirados de um charset à sua escolha, sem schema e sem opinião sobre como é codificada. Por isso ela é a ferramenta certa quando a estrutura é irrelevante ou quando um sistema externo já especifica o formato.

Casos de uso típicos incluem chaves de API geradas manualmente, identificadores de sessão temporários, slugs aleatórios para URLs não-adivinháveis, geração simples de senha sem regras de complexidade, salts criptográficos para hashes, IDs anônimos, códigos de convite e seeds para fixtures de teste. O alfabeto e o comprimento certos dependem do caso, não de uma convenção fixa.

Comprimento e entropia

A força de uma string aleatória se mede em bits de entropia, dado pela fórmula log2(tamanho_do_charset) × comprimento. Algumas referências:

  • 10 chars alfanuméricos (62 símbolos) — cerca de 59,5 bits
  • 16 chars alfanuméricos — cerca de 95,3 bits
  • 16 chars em hex (16 símbolos) — exatos 64 bits
  • 22 chars em base64url — cerca de 132 bits, o equivalente a um UUID codificado em base64
  • 32 chars em hex — 128 bits, a força de uma saída de MD5

O NIST SP 800-63B recomenda pelo menos 64 bits para tokens de sessão de baixa sensibilidade e 128 bits ou mais para tokens críticos como links de reset de senha, chaves de API com escopo administrativo e nonces de assinatura. Abaixo de 64 bits, força bruta começa a ficar viável para um atacante motivado.

Math.random não é aleatório o suficiente

Nunca use Math.random() ou equivalentes em outras linguagens para tokens que protejam algo. O PRNG padrão da maioria dos runtimes é rápido, mas previsível: com amostras suficientes, um atacante recupera o estado interno e prevê todos os valores futuros. A primitiva correta é um gerador pseudoaleatório criptograficamente seguro (CSPRNG), exposto em toda plataforma moderna:

// Browser
const bytes = new Uint8Array(16);
crypto.getRandomValues(bytes);

// Node.js
const { randomBytes } = require('crypto');
randomBytes(16);

// Python
import secrets
secrets.token_urlsafe(16)

Todos puxam do pool de entropia do sistema operacional (/dev/urandom no Linux/macOS, BCryptGenRandom no Windows). Esta ferramenta usa crypto.getRandomValues internamente, então a saída é segura para uso sensível.

Escolhendo o alfabeto certo

O charset é mais que estética. Cada alfabeto tem trade-offs:

  • Alfanumérico (62) — saída mais densa URL-safe sem símbolos. Padrão para a maioria dos casos.
  • Hex (16) — case-insensitive e trivialmente URL-safe; a saída é o dobro do tamanho para a mesma entropia.
  • Base64 — 64 símbolos incluindo +, / e o padding =. Compacta, mas quebra dentro de URLs sem encoding. Prefira base64url (- e _ no lugar).
  • Base32 (RFC 4648) — 32 letras e dígitos sem ambiguidade, case-insensitive, projetada para transcrição humana.
  • Base58 (Bitcoin) — remove os visualmente ambíguos 0, O, l, I para códigos lidos em voz alta.
  • Alfanumérico + símbolos — mais forte para senhas; pode precisar de quoting em URLs e shells.

Se um código vai ser digitado por uma pessoa, exclua caracteres ambíguos (0/O, 1/l/I) e aumente o comprimento para repor a entropia perdida.

FAQ

Qual o tamanho ideal?

Para tokens de segurança, mire em pelo menos 16 caracteres alfanuméricos (~95 bits) ou 22 caracteres em base64url (~132 bits). Para identificadores não sensíveis, 8–12 normalmente bastam.

Posso usar como senha?

Sim — desde que gerada por CSPRNG (esta ferramenta faz isso) e com comprimento suficiente. 16+ caracteres alfanuméricos é uma senha forte gerada por máquina; para contas que serão digitadas por humanos, prefira uma passphrase mais fácil de lembrar.

Os símbolos quebram minha URL?

Alguns sim. Base64 padrão (+, /, =) precisa de URL-encoding; os alfabetos alfanumérico e hex são sempre URL-safe. Se a string vai viajar em URL, escolha esses ou use base64url.

Ferramentas Relacionadas