Gerador de Base64 aleatório

Crie strings Base64 aleatórias com o gerador seguro de números aleatórios do seu navegador. Defina o comprimento em bytes ou em caracteres, gere até 1000 de uma vez e escolha a saída padrão ou segura para URL.

Funciona inteiramente no seu navegador. Nada é enviado.

Como usar

  1. 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.
  2. Defina a Quantidade de strings de que você precisa e o Separador entre elas: Nova linha, Vírgula ou Espaço.
  3. 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 =.
  4. 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.

BytesCaracteres Base64EntropiaUso típico
121696 bitsNonce (IV) do AES-GCM
1624 (22 sem preenchimento)128 bitsSalts, tokens de sessão e CSRF, chaves AES-128
3244 (43 sem preenchimento)256 bitsChaves AES-256 e HMAC-SHA256, segredos HS256, chaves de API
6488 (86 sem preenchimento)512 bitsChaves 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 .env como APP_KEY=base64:..., no mesmo formato de uma string de 32 bytes gerada por esta ferramenta.
  • Secrets do Kubernetes. Os valores em data precisam 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 em stringData.
  • 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?
Gera o mesmo tipo de valor. Com comprimento de 32 bytes, a variante Padrão e o preenchimento ativado, cada resultado tem 44 caracteres, termina com um = 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?
Sempre que o valor for usado em uma URL, uma query string, um cookie ou um nome de arquivo. No Base64 padrão, a / 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.