Como gerar uma chave
- Clique na predefinição que corresponde ao que você está configurando. 32 bytes vem selecionado quando a página abre.
- Copie o valor de Valores aleatórios. Predefinições com uma linha de configuração, como Laravel ou Auth.js, também a mostram em Pronto para colar.
- Clique em Gerar novo para outra chave, ou aumente a Quantidade para criar várias de uma vez, por exemplo uma por ambiente.
As predefinições ajustam a quantidade de bytes e o formato para você. Mude qualquer um dos campos e a ferramenta volta para Personalizado, mantendo os seus valores.
Predefinições e onde cada chave vai
| Predefinição | O que você recebe | Comprimento | Lugar típico |
|---|---|---|---|
| 16 / 32 / 64 bytes | bytes aleatórios em Base64 | 24 / 44 / 88 | chaves genéricas, salts, segredos |
| Laravel APP_KEY | base64: + 32 bytes | 51 | APP_KEY no .env |
| Chave AES-128 | 16 bytes, Base64 | 24 | AES-128-GCM ou -CBC |
| Chave AES-256 | 32 bytes, Base64 | 44 | AES-256-GCM ou -CBC |
| Segredo HMAC | 32 bytes, Base64 | 44 | assinaturas HMAC-SHA256, webhooks |
| Segredo JWT HS256 | 32 bytes, Base64URL | 43 | JWT_SECRET para tokens HS256 |
| Segredo do Auth.js | 32 bytes, Base64 | 44 | AUTH_SECRET (antes NEXTAUTH_SECRET) |
| Django SECRET_KEY | 50 caracteres do alfabeto do Django | 50 | SECRET_KEY nas settings |
| Rails secret_key_base | 64 bytes, hex | 128 | secret_key_base |
| Token de API | 32 bytes, Base64URL | 43 | bearer tokens, links de convite |
| UUID v4 (Base64URL) | um UUID aleatório na forma curta | 22 | IDs compactos; o UUID canônico também aparece |
A predefinição de nonce de CSP serve a outro propósito; ela tem página própria, o gerador de nonce de CSP.
Os tamanhos seguem os algoritmos. Chaves AES têm exatamente 16, 24 ou 32 bytes; qualquer outra coisa é rejeitada. A RFC 7518 exige segredos HS256 de pelo menos 256 bits, e é por isso que a predefinição de JWT usa 32 bytes. Uma chave HMAC menor que a saída do hash enfraquece o HMAC, então 32 bytes servem para HMAC-SHA256 e a predefinição de 64 bytes serve para HMAC-SHA512. A predefinição do Django sorteia os 50 caracteres por amostragem com rejeição, então todo caractere do alfabeto tem a mesma probabilidade, do mesmo jeito que o próprio get_random_secret_key() do Django.
A chave Base64 é texto; a chave são os bytes
O valor que você copia é uma representação em Base64 de bytes aleatórios. O código que o usa precisa decodificá-lo antes:
import base64, os
key = base64.b64decode(os.environ["AES_KEY"])
assert len(key) == 32
No Node.js, o equivalente é Buffer.from(process.env.AES_KEY, "base64"). Se você entregar a string de 44 caracteres direto a uma biblioteca AES, ela a rejeita (AESGCM key must be 128, 192, or 256 bits em Python, Invalid key length no Node.js) ou, em bibliotecas mais permissivas, usa os bytes errados sem reclamar. Frameworks que leem as próprias chaves, como o Laravel com o prefixo base64:, fazem essa decodificação por você.
Base64URL e Base64 padrão decodificam para os mesmos bytes, mas os parsers costumam ser rígidos quanto a qual aceitam. Mantenha o formato que a predefinição gerou, a menos que você saiba que o consumidor aceita o outro.
Chaves Fernet e outros formatos
O pacote cryptography do Python espera uma chave Fernet como 32 bytes em Base64 URL-safe com preenchimento, 44 caracteres. As predefinições de JWT e de token de API dão a forma URL-safe sem o =, então acrescente um no final, ou gere a chave em Python:
from cryptography.fernet import Fernet
print(Fernet.generate_key().decode())
Para qualquer outro caso, parta da quantidade de bytes: escolha Personalizado, informe os bytes que a documentação da sua biblioteca indica e escolha Base64, Base64URL ou hex. O gerador de Base64 aleatório explica os comprimentos de saída, e HMAC em Base64 ou criptografia AES permitem testar uma chave nova na hora.
Cuidando das chaves depois de gerar
Uma chave gerada aqui existe só nesta aba até você copiá-la. Depois disso, ela fica tão segura quanto o lugar onde você a cola. Guarde chaves de produção no armazenamento de segredos da sua plataforma ou num gerenciador de segredos, use uma chave diferente por ambiente e nunca as coloque em commits; uma chave que chegou a um repositório Git deve ser considerada pública e substituída. Fazer a rotação de uma chave de criptografia significa recriptografar os dados antigos ou manter a chave antiga para descriptografar, então planeje isso antes de trocar um APP_KEY num sistema em produção.
Perguntas frequentes
Como gerar uma chave Base64 de 32 bytes?
A predefinição 32 bytes já vem selecionada quando a página abre, então a chave na saída já é uma: 44 caracteres terminando em =. No terminal, openssl rand -base64 32 faz o mesmo.
Posso usar a string Base64 de 44 caracteres direto como chave AES-256?
Não. O AES-256 precisa de 32 bytes brutos, e os 44 caracteres são o texto Base64 deles. Decodifique a string antes; passar o próprio texto falha com um erro como “Invalid key length” no Node.js.
Como gerar um APP_KEY do Laravel sem o artisan?
Escolha a predefinição Laravel APP_KEY e copie a linha APP_KEY=base64:… para o .env. Ela tem o mesmo formato que o php artisan key:generate grava: o prefixo base64: mais 32 bytes aleatórios para a cifra padrão AES-256-CBC.
Como faço uma chave Fernet aqui?
Não há predefinição de Fernet. Escolha 32 bytes, defina o Formato como Base64URL e acrescente um = aos 43 caracteres, porque o Fernet espera Base64 URL-safe com preenchimento, de 44 caracteres. Ou rode Fernet.generate_key() em Python.
É seguro gerar chaves de produção num navegador?
A chave vem do crypto.getRandomValues, um gerador criptograficamente seguro, e a página não tem como enviá-la a lugar nenhum. O risco maior é o que vem depois: guarde a chave num gerenciador de segredos ou numa variável de ambiente protegida, nunca num repositório.