# 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.

- Endereço oficial: https://pradev.com.br/gerador-de-senha
- Categoria: Codificação e segurança
- Tipo: Gerador
- Atualizado em: 2026-09-30
- Autor: Leonardo Gaertner (https://pradev.com.br/sobre)
- Preço: grátis, sem cadastro. O processamento acontece no navegador de quem usa.

## 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

```text
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;
}
```

_JavaScript. 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))
```

_Python_

```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;
}
```

_PHP_

## 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.

## Guias

- [Variáveis de ambiente e segredos: como usar o .env sem vazar senhas](https://pradev.com.br/guias/variaveis-de-ambiente-e-segredos-env): Como usar variáveis de ambiente e o arquivo .env em Node.js, Python e PHP, por que prefixos como VITE_ e NEXT_PUBLIC_ expõem segredos e o que fazer se um vazar.
- [Como guardar senhas: por que não usar SHA-256 e o que usar](https://pradev.com.br/guias/como-guardar-senhas-com-hash): Por que MD5 e SHA-256 não servem para senhas e como guardar senhas com scrypt, bcrypt ou Argon2 em Node.js, Python e PHP, com sal e código testado.
- [Como gerar senha segura em código (sem Math.random)](https://pradev.com.br/guias/como-gerar-senha-segura-em-codigo): Por que Math.random não serve para senhas, como evitar o viés do módulo e como gerar senhas seguras em JavaScript, Python e PHP, com código testado.

## Ferramentas relacionadas

- [Gerador de UUID](https://pradev.com.br/gerador-de-uuid): Gere UUID v4 aleatório com um clique: em lote, em maiúsculas, com ou sem hífens. Grátis, gerado no seu navegador.
- [Codificar Base64](https://pradev.com.br/codificar-base64): Converta texto para Base64 online, com suporte a acentos (UTF-8) e opção URL-safe. Grátis, no navegador, sem enviar seus dados.
- [Gerador de CPF](https://pradev.com.br/gerador-de-cpf): Gere CPF válido para testar sistemas e formulários. Grátis, com ou sem pontuação, direto no navegador. Só para testes de software.
- [Decodificar Base64](https://pradev.com.br/decodificar-base64): Decodifique Base64 para texto online, com suporte a UTF-8 e Base64 URL-safe. Grátis, direto no navegador, sem enviar seus dados.
- [Decodificador JWT](https://pradev.com.br/decodificador-jwt): Decodifique um JWT online e veja header, payload e datas de exp, iat e nbf. O token não sai do navegador. Não verifica a assinatura.
- [Base64 de Arquivo](https://pradev.com.br/base64-de-arquivo): Converta imagem, PDF ou qualquer arquivo para Base64 ou data URI online, e Base64 de volta para arquivo. Com prévia de imagem. Grátis, no navegador.
