Gerador de senha forte e segura

O gerador de senha cria senhas aleatórias com o tamanho e os tipos de caractere que você escolher, usando o gerador criptográfico do navegador. A senha é criada no seu dispositivo e não é enviada nem armazenada em nenhum lugar.

Atualizado em · Por Leonardo Gaertner

••••••••••••••••

Achou um resultado errado ou tem uma sugestão? Avise por e-mail.

Como usar

  1. Ajuste o tamanho da senha com o controle deslizante.
  2. Marque os tipos de caractere: minúsculas, maiúsculas, números e símbolos.
  3. Clique em Gerar outra e depois em Copiar. Salve a senha em um gerenciador de senhas.

Como funciona

Cada caractere é sorteado com o gerador criptográfico do navegador, sem viés entre os caracteres disponíveis. A ferramenta garante ao menos um caractere de cada tipo marcado e embaralha as posições.

A força de uma senha aleatória depende do tamanho e da variedade de caracteres. A entropia, em bits, é o tamanho multiplicado pelo logaritmo de base 2 do número de caracteres possíveis.

A ferramenta mostra essa estimativa. Ela vale para senhas sorteadas assim e não serve para avaliar senhas escolhidas por uma pessoa, que costumam ser mais previsíveis.

Exemplo de cálculo

Senha de 16 caracteres, com 94 caracteres possíveis

Entropia: 16 × log₂(94) ≈ 105 bits

Classificação da ferramenta: muito forte (80 bits ou mais)

Em código

Para gerar senhas em código, use o gerador aleatório criptográfico da linguagem, nunca Math.random, e sorteie sem viés entre os caracteres.

JavaScript
const ALFABETO = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
  'abcdefghijklmnopqrstuvwxyz' +
  '0123456789!@#$%&*-_';

function gerarSenha(tamanho = 16, alfabeto = ALFABETO) {
  // Descarta bytes acima do maior múltiplo do tamanho do alfabeto: sem isso, os
  // primeiros caracteres sairiam mais vezes (o viés do módulo)
  const limite = 256 - (256 % alfabeto.length);
  let senha = '';
  while (senha.length < tamanho) {
    // getRandomValues aceita no máximo 65536 bytes por chamada
    const bytes = crypto.getRandomValues(new Uint8Array(Math.min(tamanho * 2, 65536)));
    for (const b of bytes) {
      if (b < limite && senha.length < tamanho) {
        senha += alfabeto[b % alfabeto.length];
      }
    }
  }
  return senha;
}

Descarta os bytes que causariam viés do módulo.

Python
import secrets

ALFABETO = (
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz"
    "0123456789!@#$%&*-_"
)


def gerar_senha(tamanho: int = 16, alfabeto: str = ALFABETO) -> str:
    # secrets.choice usa o gerador seguro do sistema e sorteia sem viés
    return "".join(secrets.choice(alfabeto) for _ in range(tamanho))
PHP
<?php
const ALFABETO = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' .
    'abcdefghijklmnopqrstuvwxyz' .
    '0123456789!@#$%&*-_';

function gerarSenha(int $tamanho = 16, string $alfabeto = ALFABETO): string
{
    $senha = '';
    $max = strlen($alfabeto) - 1;
    for ($i = 0; $i < $tamanho; $i++) {
        $senha .= $alfabeto[random_int(0, $max)]; // random_int é seguro e sem viés
    }
    return $senha;
}

Perguntas frequentes

Qual o tamanho ideal de uma senha?

Para contas comuns, 14 a 16 caracteres aleatórios já são um bom ponto de partida. Quanto mais longa, mais forte, e um gerenciador de senhas evita ter que decorar.

A senha gerada é guardada em algum lugar?

Não. Ela é criada no seu navegador e desaparece quando você fecha ou recarrega a página. Guarde-a em um gerenciador de senhas.

Devo incluir símbolos?

Símbolos ampliam as combinações possíveis, mas o tamanho pesa mais. Alguns sites recusam certos símbolos; nesse caso, desmarque-os e aumente o tamanho.

O que faz a opção de evitar caracteres ambíguos?

Remove caracteres que se confundem visualmente, como O, 0, o, I, l e 1. É útil quando a senha precisa ser digitada à mão ou lida em voz alta.