Ferramenta de Validação e Geração de Senhas
Ferramenta profissional de geração e validação de senhas que cria senhas fortes e frases de acesso fáceis de lembrar, com suporte para geração em lote, garantia de unicidade, avaliação de força e validação de políticas. Recursos incluem fonte aleatória criptograficamente segura, conjuntos de caracteres configuráveis, filtragem de caracteres semelhantes, estatísticas de deduplicação em lote e funcionalidade de cópia com um clique. Inclui exemplos de código multilíngue, base de conhecimento de senhas, melhores práticas de segurança e ferramentas de teste de políticas. Todas as operações são realizadas localmente no seu navegador, garantindo privacidade e segurança.
Gerador de Senha
-
#
Testador de Política de Senha
- Comprimento
- Minúsculas
- Maiúsculas
- Dígitos
- Símbolos
- Sequencial
- Repetições
- Lista de bloqueio
Gerador de Frases de Senha
Guia prático de hashing de senhas
- Use Argon2id com parâmetros razoáveis de resistência a memória
- Tempo ≥ 2 passagens, memória ≥ 64MB (ajuste conforme o ambiente)
- Armazene um salt exclusivo por usuário; opcionalmente use um pepper na camada do aplicativo
- Escolha SHA-256 ou SHA-512 com iterações ≥ 210k (ajuste conforme necessário)
- Use um salt exclusivo para cada hash; suporte a atualizações de parâmetro
- Faça a migração para parâmetros de maior custo no próximo login do usuário
- Defina o custo entre 10–14, dependendo das capacidades do servidor
- Evite problemas de truncamento; gere hash da senha completa
- Implemente limitação de taxa e monitoramento nos endpoints de autenticação
Avaliador de Força de Senha
A força é aproximada pela entropia: entropia = log2(tamanho do conjunto de caracteres) × comprimento. Um conjunto de caracteres maior e um comprimento maior melhoram a resistência a adivinhações.
- Fraca: < 50 bits —— Adequada apenas para cenários únicos ou de baixo valor
- Razoável: 50–80 bits —— Aceitável para cenários de baixo risco
- Forte: 80–110 bits —— Alvo padrão recomendado
- Excelente: > 110 bits —— Recomendado para contas de admin ou críticas
Observação: Modelos de ataque do mundo real podem variar; evite reutilizar senhas e ative a autenticação multifator (MFA).
Como Usar
- Selecione o comprimento e o conjunto de caracteres (Minúsculas/Maiúsculas/Digitos/Símbolos); ative opcionalmente "Evitar Semelhantes" e "Exigir Cada"
- Para controle mais preciso: exclua caracteres específicos ou grupos de caracteres, ou escolha subconjuntos de símbolos
- Selecione quantas senhas deseja gerar, depois clique em Gerar; os resultados em lote são desduplicados automaticamente e podem ser copiados de uma só vez
- Para validar senhas existentes, use o Testador de Políticas; para frases de acesso fáceis de lembrar, use o Gerador de Frases de Acesso
Recursos
- Fonte aleatória criptograficamente segura (Web Crypto)
- Conjuntos de caracteres e grupos de símbolos configuráveis
- Filtragem de caracteres semelhantes e exclusões personalizadas
- Geração em lote de 1 a 100 senhas, sempre exclusivas
- Métricas de força e entropia
- Testador de Políticas e Gerador de Frases de Acesso
- Exemplos de código multilíngue
- Cópia com um clique (única ou todas)
Base de Conhecimento sobre Senhas
- Entropia ≈ log2(tamanho do conjunto de caracteres) × comprimento; o comprimento geralmente contribui mais
- Metas recomendadas: Contas gerais ≥ 80 bits; Contas com altos privilégios/financeiras ≥ 110 bits
- Conjunto de caracteres maior + comprimento maior → maior resistência a adivinhação
- Adicionar símbolos cegamente é menos eficaz do que aumentar o comprimento
- Evite padrões previsíveis (ex.: sempre 'letra maiúscula no início + número no final!')
- Priorize um comprimento suficiente e, em seguida, aumente moderadamente a diversidade de caracteres
- Sequências de teclado (ex.: qwerty), blocos repetidos, datas de aniversário/anos são facilmente alvo de regras
- Usar 'senha raiz + sufixo do site' cria reutilização de variantes, concentra risco e torna as senhas mais fáceis de adivinhar
- Nunca reutilize a mesma senha em vários sites
- Use um gerenciador de senhas; garanta senhas exclusivas por site; ative MFA para contas críticas
- Evite transmitir senhas em texto simples por canais públicos; use frases de acesso 'pronunciáveis' quando necessário
- Altere e torne as senhas exclusivas imediatamente se for detectado vazamento ou reutilização
- Combinações de 4 a 6 palavras aleatórias são geralmente fortes e fáceis de lembrar
- Use separadores, iniciales em maiúsculas e insira números para aumentar a força e a legibilidade
- Evite concatenar diretamente frases comuns, letras de músicas ou citações famosas
Melhores Práticas de Segurança de Senhas
- Use comprimento suficiente: 16+ caracteres para contas gerais, 24+ para contas críticas
- Para facilidade de memorização, priorize frases-senha; use um gerenciador de senhas para armazenar senhas aleatórias de alta força
- Ative a autenticação multifator (MFA) sempre que possível
- Nunca reutilize senhas entre sites — cada conta deve ter uma senha exclusiva
A entropia mede a imprevisibilidade com base no comprimento e no tamanho do conjunto de caracteres — quanto maior o número de bits de entropia, mais forte geralmente é a senha.
- Priorize o aumento do comprimento para obter o máximo de aumento de força
- Use vários conjuntos de caracteres quando viável
- Excluir muitos caracteres reduz o conjunto de caracteres e enfraquece a força
- Prefira requisitos de comprimento e listas negras de senhas comuns/vazadas em vez de regras de composição complexas
- Evite rotações obrigatórias frequentes; altere a senha somente quando uma violação ou risco for detectado
- Use listas de senhas comprometidas para bloquear senhas comumente usadas ou vazadas
- Use 4 a 6 palavras aleatórias unidas por separadores, por exemplo, lago-CENOURA-planeta_7
- Evite citações famosas, letras de músicas ou outras frases comuns; a aleatoriedade é mais importante do que a "esperteza"
- Para contas críticas, use um gerenciador de senhas para armazenar senhas verdadeiramente aleatórias de alta entropia
- "Exigir cada conjunto selecionado" garante que pelo menos um caractere de cada categoria escolhida apareça
- "Evitar similares" melhora a legibilidade, mas reduz ligeiramente o tamanho do conjunto de caracteres
- Símbolos podem ser restritos a um subconjunto suportado pelo sistema alvo
- Nunca armazene senhas em texto simples; use hashing forte (Argon2id/PBKDF2/Bcrypt) com sal
- Configure os parâmetros (memória/tempo/custo) adequadamente; considere usar pimenta quando necessário
- Limite a taxa de tentativas de login e monitorar falhas; aplique CAPTCHAs ou verificação de dispositivo durante ataques
- Prefira TOTP ou chaves de hardware; evite SMS sempre que possível
- Fluxos de recuperação seguros com autenticação multifator ou verificação por e-mail e aplique períodos de resfriamento
- Forneça códigos de recuperação de backup e incentive os usuários a armazená-los com segurança
- Implemente atrasos progressivos ou bloqueios com pontuação de risco de IP/dispositivo
- Aplique WAFs e limites de taxa para APIs e formulários de login
- Monitore stuffing de credenciais e incentive os usuários a adotar senhas exclusivas
- Use um gerenciador de senhas confiável para armazenamento e preenchimento automático
- Nunca compartilhe senhas em texto simples por chat ou e-mail; use ferramentas de gerenciamento de segredos para equipes
- Se anote senhas offline, garanta a segurança física
Como gerar senhas por meio de linguagens de programação
function randomPassword(length = 16, sets = {lower:true, upper:true, digits:true, symbols:true}) {
const pools = {
lower: 'abcdefghijklmnopqrstuvwxyz',
upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
digits: '0123456789',
symbols: '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
};
let pool = '';
for (const k of Object.keys(sets)) if (sets[k]) pool += pools[k];
if (!pool) throw new Error('No charset');
// Rejection sampling removes modulo bias
const limit = Math.floor(0x100000000 / pool.length) * pool.length;
const buf = new Uint32Array(1);
let out = '';
for (let i = 0; i < length; i++) {
do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
out += pool[buf[0] % pool.length];
}
return out;
}
import secrets
def random_password(length=16, lower=True, upper=True, digits=True, symbols=True):
pools = {
'lower': 'abcdefghijklmnopqrstuvwxyz',
'upper': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits': '0123456789',
'symbols': '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
}
pool = ''.join(v for k, v in pools.items() if locals()[k])
if not pool:
raise ValueError('No charset')
return ''.join(secrets.choice(pool) for _ in range(length))
function random_password($length = 16, $sets = ['lower'=>true,'upper'=>true,'digits'=>true,'symbols'=>true]) {
$pools = [
'lower' => 'abcdefghijklmnopqrstuvwxyz',
'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits' => '0123456789',
'symbols' => '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
];
$pool = '';
foreach ($sets as $k => $on) if ($on) $pool .= $pools[$k];
if ($pool === '') throw new Exception('No charset');
$out = '';
for ($i = 0; $i < $length; $i++) {
$out .= $pool[random_int(0, strlen($pool)-1)];
}
return $out;
}
package main
import (
"crypto/rand"
"math/big"
)
func RandomPassword(length int, pool string) (string, error) {
out := make([]byte, length)
for i := 0; i < length; i++ {
nBig, err := rand.Int(rand.Reader, big.NewInt(int64(len(pool))))
if err != nil { return "", err }
out[i] = pool[nBig.Int64()]
}
return string(out), nil
}
import java.security.SecureRandom;
public class Pw {
static final String POOL = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
static final SecureRandom SR = new SecureRandom();
static String randomPassword(int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int idx = SR.nextInt(POOL.length());
sb.append(POOL.charAt(idx));
}
return sb.toString();
}
}
using System;
using System.Security.Cryptography;
public static class Pw {
public static string RandomPassword(int length, string pool) {
// GetInt32 draws an unbiased value in [0, pool.Length)
var chars = new char[length];
for (int i = 0; i < length; i++) {
chars[i] = pool[RandomNumberGenerator.GetInt32(pool.Length)];
}
return new string(chars);
}
}
use rand::rngs::OsRng;
use rand::Rng;
fn random_password(length: usize, pool: &str) -> String {
// gen_range is uniform, so there is no modulo bias
let chars: Vec = pool.chars().collect();
(0..length)
.map(|_| chars[OsRng.gen_range(0..chars.len())])
.collect()
}
fn main() {
let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
let pw = random_password(16, pool);
println!("{}", pw);
}