Como gerar Base64 aleatório
- Defina Bytes com a quantidade de aleatoriedade de que você precisa, de 1 a 4096. O padrão de 32 bytes equivale a 256 bits.
- Escolha o Formato: Base64, Base64URL (URL-safe, sem preenchimento) ou hex. Para Base64 você também pode marcar Sem preenchimento (=).
- Ajuste Quantidade para gerar vários valores de uma vez, até 1000, um por linha.
- Copie a saída, baixe como arquivo de texto ou clique em Gerar novo para um conjunto novo. Entropia e Comprimento abaixo da saída mostram os bits de aleatoriedade e a quantidade de caracteres.
Se você precisa de uma chave em um formato específico, como o APP_KEY do Laravel ou uma chave AES-256, use uma das Predefinições no topo; o gerador de chaves Base64 explica cada uma delas.
Qual será o tamanho da saída
A aleatoriedade está nos bytes; o formato só decide como eles são escritos. O Base64 guarda 6 bits em cada caractere, o hex só 4, então o hex é sempre mais longo para a mesma força:
| Bytes | Bits | Base64 | Base64, sem preenchimento | Base64URL | Hex |
|---|---|---|---|---|---|
| 8 | 64 | 12 | 11 | 11 | 16 |
| 16 | 128 | 24 | 22 | 22 | 32 |
| 24 | 192 | 32 | 32 | 32 | 48 |
| 32 | 256 | 44 | 43 | 43 | 64 |
| 48 | 384 | 64 | 64 | 64 | 96 |
| 64 | 512 | 88 | 86 | 86 | 128 |
Quantidades de bytes divisíveis por 3 (24, 48) não geram nenhum =, então as colunas com e sem preenchimento coincidem. Use Base64URL quando o valor for para uma URL, um nome de arquivo ou um cookie, porque ali + e / precisariam de escape.
Quantos bytes usar
- IDs únicos, IDs de requisição, nomes de upload: 16 bytes (128 bits). Adivinhar um deles ou gerar uma colisão não é uma preocupação prática.
- Tokens de sessão, tokens de API, links de redefinição de senha: 32 bytes. A margem extra custa cerca de 20 caracteres.
- Salts para hash de senhas: 16 bytes é a recomendação usual; o salt não precisa ser secreto, só único.
- Dados de teste: qualquer tamanho, e Quantidade enche um arquivo com mil valores de uma vez.
Uma string aleatória só é tão forte quanto a sua quantidade de bytes. Cortar um valor de 44 caracteres para 20 só para caber em um campo joga fora mais da metade da entropia, então escolha uma quantidade menor de bytes e mantenha a saída completa.
O mesmo no terminal ou no código
Todos estes produzem 32 bytes aleatórios em Base64 (secrets.token_urlsafe usa o alfabeto URL-safe, sem preenchimento):
openssl rand -base64 32
head -c 32 /dev/urandom | base64
import base64, secrets
print(base64.b64encode(secrets.token_bytes(32)).decode())
print(secrets.token_urlsafe(32))
No Node.js, crypto.randomBytes(32).toString("base64url") entrega a forma URL-safe. Uma armadilha do OpenSSL: acima de 48 bytes, openssl rand -base64 quebra a saída a cada 64 caracteres, então um valor de 64 bytes chega em duas linhas. Use openssl rand 64 | openssl base64 -A para obter uma linha só, ou remova a quebra de linha antes de colocar o valor em um arquivo de configuração. Mais receitas nas páginas de OpenSSL e Python.
Perguntas frequentes
Este gerador aleatório é seguro o bastante para senhas e tokens?
Sim. Ele usa crypto.getRandomValues, o gerador de números aleatórios criptograficamente seguro do navegador. Evite Math.random() para qualquer coisa secreta; ele não foi feito para ser imprevisível.
Como obter uma string Base64 aleatória com exatamente N caracteres?
Escolha N × 3 ÷ 4 bytes. Com uma quantidade de bytes divisível por 3 não há preenchimento, então 33 bytes geram exatamente 44 caracteres e 48 bytes geram 64. Caso contrário, marque Sem preenchimento (=) e o comprimento será ⌈4 × bytes ÷ 3⌉.
Dois valores gerados podem sair iguais?
Em teoria, sim, mas com 16 bytes (128 bits) ou mais a chance é desprezível: seriam necessários cerca de 2^64 valores para uma colisão se tornar provável. É por isso que 16 bytes é um mínimo comum para IDs aleatórios únicos.
Os valores ficam salvos em algum lugar?
Não. Eles ficam na memória desta aba até você copiar ou baixar, e a página não consegue fazer requisições de rede, exceto as do contador de visitas da Cloudflare. Recarregue a página e eles somem.