Como usar
- Defina o Comprimento e, em Unidade, escolha se ele é medido em Bytes de dados aleatórios ou em Caracteres do Base64. Para uma chave, use bytes: 32 bytes equivalem a uma chave de 256 bits.
- Defina a Quantidade de strings de que você precisa e o Separador entre elas: Nova linha, Vírgula ou Espaço.
- Escolha a variante Padrão ou Seguro para URL. Com a unidade em bytes, você também pode desativar o Preenchimento se o sistema de destino não esperar os sinais =.
- Clique em Gerar para obter valores novos e depois copie a lista com Copiar tudo ou salve-a com Baixar.
Bytes, caracteres e entropia
A força de uma string aleatória é medida em bits de entropia. Cada byte aleatório acrescenta 8 bits, então 16 bytes dão 128 bits e 32 bytes dão 256 bits. O Base64 só muda a forma de escrever esses bytes: cada caractere carrega 6 bits, e cada 3 bytes viram 4 caracteres. A ferramenta mostra a entropia de cada string, para que você possa conferi-la de relance.
Com a unidade bytes, a saída decodifica para exatamente esse número de bytes aleatórios, que é o que chaves e segredos exigem. Com a unidade caracteres, você obtém um número exato de caracteres, cada um escolhido de maneira uniforme no alfabeto de 64 caracteres; use-a quando um sistema pedir um token de comprimento fixo e o armazenar como texto.
| Bytes | Caracteres Base64 | Entropia | Uso típico |
|---|---|---|---|
| 12 | 16 | 96 bits | Nonce (IV) do AES-GCM |
| 16 | 24 (22 sem preenchimento) | 128 bits | Salts, tokens de sessão e CSRF, chaves AES-128 |
| 32 | 44 (43 sem preenchimento) | 256 bits | Chaves AES-256 e HMAC-SHA256, segredos HS256, chaves de API |
| 64 | 88 (86 sem preenchimento) | 512 bits | Chaves HMAC-SHA512, segredos HS512 |
Onde valores Base64 aleatórios são usados
- Segredos JWT. A RFC 7518 exige uma chave HMAC pelo menos do tamanho da saída do hash: 32 bytes para HS256, 48 para HS384 e 64 para HS512. Algumas bibliotecas usam a string do segredo como está, outras a decodificam de Base64 antes, então confira qual das duas formas a sua espera. O decodificador JWT verifica assinaturas de HS256 a HS512 com qualquer um dos dois tipos de segredo, e o gerador de HMAC aceita a chave como texto, hex ou Base64.
- Chaves de aplicação. O Laravel, por exemplo, guarda uma chave de criptografia de 32 bytes no arquivo
.envcomoAPP_KEY=base64:..., no mesmo formato de uma string de 32 bytes gerada por esta ferramenta. - Secrets do Kubernetes. Os valores em
dataprecisam estar em Base64 padrão com preenchimento. Uma string gerada no modo bytes, com a variante Padrão e o preenchimento ativado, pode ir direto para lá, e o Pod recebe os bytes aleatórios brutos. Se a aplicação espera o próprio texto Base64, coloque-o emstringData. - Tokens em URLs. Links de redefinição de senha, códigos de convite e outros tokens que trafegam em URLs devem usar a variante segura para URL, que substitui
+e/por-e_. Veja Base64URL para mais detalhes.
Por que crypto.getRandomValues e não Math.random
Math.random() é um gerador rápido de uso geral. A saída dele não foi projetada para ser imprevisível e, em alguns motores JavaScript, o estado interno pode ser reconstruído a partir de poucos valores. Esta ferramenta usa crypto.getRandomValues(), um gerador criptograficamente seguro cuja semente vem do sistema operacional, o mesmo tipo de fonte por trás do openssl rand e do módulo secrets do Python. Os valores são criados no seu dispositivo e nunca são enviados nem armazenados.
Como gerar Base64 aleatório no código
# Shell: 32 bytes aleatórios em Base64 (44 caracteres)
openssl rand -base64 32
head -c 32 /dev/urandom | base64
# Python
import base64, secrets
base64.b64encode(secrets.token_bytes(32)).decode()
secrets.token_urlsafe(32) # seguro para URL, sem preenchimento, 43 caracteres
// Node.js
const crypto = require('crypto');
crypto.randomBytes(32).toString('base64');
crypto.randomBytes(32).toString('base64url'); // seguro para URL, sem preenchimento
// Navegador
const bytes = crypto.getRandomValues(new Uint8Array(32));
btoa(String.fromCharCode(...bytes));
Perguntas frequentes
Qual deve ser o tamanho de uma chave ou de um segredo aleatório?
16 bytes (128 bits) bastam para valores que só precisam ser únicos e impossíveis de adivinhar, como IDs de sessão, tokens CSRF e salts. Use 32 bytes (256 bits) para chaves AES-256, chaves HMAC-SHA256 e segredos HS256, e 64 bytes para HMAC-SHA512 e HS512.
É o mesmo que openssl rand -base64 32?
= e decodifica para 32 bytes aleatórios. Os valores em si, é claro, são diferentes a cada vez.Devo usar a unidade bytes ou caracteres?
Use bytes quando a string for decodificada, como acontece com chaves de criptografia e Secrets do Kubernetes. Use caracteres quando um sistema precisar de um token de comprimento exato e usar o texto como está. Só é garantido que uma string gerada com a unidade caracteres seja decodificada sem problemas quando o comprimento dela é múltiplo de 4.
Quando preciso da variante segura para URL?
/ separa caminhos de URL e o + vira espaço em query strings codificadas como formulário. O Base64 seguro para URL usa - e _ no lugar deles e costuma ser escrito sem preenchimento.Os valores gerados são armazenados ou enviados para algum lugar?
Não. Eles são gerados por JavaScript no seu navegador, nunca são transmitidos e desaparecem quando você sai da página. Depois que você usar um deles como segredo de verdade, guarde-o em um gerenciador de senhas ou em um cofre de segredos, e não em mensagens de chat ou tickets.