Strumento per Generare e Convalidare Password
Strumento professionale per generare e convalidare password che crea password sicure e frasi password memorabili, con supporto alla generazione in batch, garanzia di unicità, valutazione della forza e convalida delle policy. Include un sorgente di numeri casuali crittograficamente sicuro, set di caratteri configurabili, filtro per caratteri simili, statistiche di deduplicazione in batch e funzionalità di copia con un clic. Offre esempi di codice multilingue, una knowledge base sulle password, best practice di sicurezza e strumenti per testare le policy. Tutte le operazioni vengono eseguite localmente nel tuo browser, garantendo privacy e sicurezza.
Generatore di password
-
#
Tester di policy per password
- Lunghezza
- Minuscole
- Maiuscole
- Cifre
- Simboli
- Sequenziale
- Ripetizioni
- Elenco bloccati
Generatore di frasi segrete
Promemoria per l'hashing delle password
- Usa Argon2id con parametri di tipo memory-hard ragionevoli
- Tempo ≥ 2 passaggi, memoria ≥ 64MB (ottimizza in base all'ambiente)
- Memorizza un salt unico per ogni utente; puoi usare un pepper a livello applicativo
- Scegli SHA-256 o SHA-512 con iterazioni ≥ 210k (ottimizza secondo necessità)
- Usa un salt unico per ogni hash; supporta aggiornamenti dei parametri
- Esegui la migrazione a parametri più costosi al successivo accesso dell'utente
- Imposta il costo tra 10 e 14, in base alle capacità del server
- Evita problemi di troncamento; esegui l'hash dell'intera password
- Implementa limitazione della frequenza e monitoraggio sugli endpoint di autenticazione
Valutatore di forza delle password
La forza è approssimata dall'entropia: entropia = log2(dimensione del set di caratteri) × lunghezza. Un set di caratteri più ampio e una lunghezza maggiore migliorano la resistenza all'indovinamento.
- Debole: < 50 bit — Adatto solo per scenari monouso o di basso valore
- Sufficiente: 50–80 bit — Accettabile per scenari a basso rischio
- Forte: 80–110 bit — Obiettivo predefinito consigliato
- Eccellente: > 110 bit — Consigliato per account amministratore o critici
Nota: I modelli di attacco nel mondo reale possono variare; evita di riutilizzare le password e attiva l'autenticazione a più fattori (MFA).
Come Usare
- Seleziona la lunghezza e il set di caratteri (Minuscolo/Maiuscolo/Cifre/Simboli); abilita facoltativamente Evita Caratteri Simili e Richiedi Ogni
- Per un controllo più preciso: escludi caratteri specifici o gruppi di caratteri, oppure scegli sottoinsiemi di simboli
- Scegli quanti password generare, quindi fai clic su Genera; i risultati in batch vengono deduplicati automaticamente e possono essere copiati tutti in una volta
- Per convalidare password esistenti, usa il Tester di Policy; per frasi password memorabili, usa il Generatore di Frasi Password
Funzionalità
- Sorgente di numeri casuali crittograficamente sicuro (Web Crypto)
- Set di caratteri e gruppi di simboli configurabili
- Filtro per caratteri simili ed esclusioni personalizzate
- Generazione in batch di 1-100 password, sempre uniche
- Metriche di forza ed entropia
- Tester di Policy e Generatore di Frasi Password
- Esempi di codice multilingue
- Copia con un clic (singola o tutte)
Knowledge Base sulle Password
- Entropia ≈ log2(dimensione del set di caratteri) × lunghezza; la lunghezza contribuisce generalmente di più
- Obiettivi consigliati: Account generali ≥ 80 bit; Account con privilegi elevati/finanziari ≥ 110 bit
- Set di caratteri più ampio + lunghezza maggiore → maggiore resistenza all'indovinamento
- Aggiungere simboli alla cieca è meno efficace che aumentare la lunghezza
- Evita schemi prevedibili (es., sempre 'Prima lettera maiuscola + numero finale!')
- Dai priorità a una lunghezza sufficiente, poi aumenta moderatamente la diversità dei caratteri
- Sequenze da tastiera (es., qwerty), blocchi ripetuti, compleanni/anni sono facilmente individuati da regole
- Usare 'password root + suffisso sito' crea varianti riutilizzate, concentra il rischio e rende le password più facili da indovinare
- Non riutilizzare mai la stessa password su più siti
- Usa un gestore di password; assicurati password uniche per ogni sito; abilita MFA per account critici
- Evita di trasmettere password in testo semplice su canali pubblici; usa frasi password 'pronunciabili' quando necessario
- Cambia immediatamente e rendi uniche le password se si rileva una perdita o un riutilizzo
- Le combinazioni di 4–6 parole casuali sono generalmente sicure e memorabili
- Usa separatori, iniziali maiuscole e inserisci numeri per aumentare la robustezza e la leggibilità
- Evita di concatenare direttamente frasi comuni, testi di canzoni o citazioni famose
Best Practice per la Sicurezza delle Password
- Usa una lunghezza sufficiente: 16+ caratteri per account generici, 24+ per quelli critici
- Per la memorizzazione, preferisci le passphrase; usa un gestore di password per memorizzare password casuali di alta robustezza
- Abilita l'autenticazione a più fattori (MFA) ogni volta che possibile
- Non riutilizzare mai le password tra i siti: ogni account deve avere una password unica
L'entropia misura l'imprevedibilità basandosi sulla lunghezza e sulla dimensione del set di caratteri: più alto è il numero di bit di entropia, più robusta è tipicamente la password.
- Priorizza l'aumento della lunghezza per ottenere il massimo guadagno in robustezza
- Usa più set di caratteri quando possibile
- Escludere troppi caratteri riduce il pool di caratteri e indebolisce la robustezza
- Preferisci requisiti di lunghezza e liste nere di password comuni/perdute piuttosto che regole di composizione complesse
- Evita rotazioni obbligatorie frequenti; cambia la password solo quando viene rilevata una violazione o un rischio
- Usa liste di password compromise per bloccare le password comuni o perdute
- Usa 4–6 parole casuali unite da separatori, es. lago-CAROTA-pianeta_7
- Evita citazioni famose, testi di canzoni o altre frasi comuni; la casualità è più importante della "genialità"
- Per gli account critici, usa un gestore di password per memorizzare password casuali veramente ad alta entropia
- «Richiedi ogni set selezionato» garantisce che almeno un carattere di ogni categoria scelta appaia
- «Evita caratteri simili» migliora la leggibilità ma riduce leggermente la dimensione del pool di caratteri
- I simboli possono essere limitati a un sottoinsieme supportato dal sistema di destinazione
- Non memorizzare mai le password in chiaro; usa hashing forte (Argon2id/PBKDF2/Bcrypt) con salt
- Configura i parametri (memoria/tempo/costo) in modo appropriato; valuta l'uso del pepper quando necessario
- Limita le tentativi di accesso e monitora i fallimenti; applica CAPTCHA o verifica del dispositivo durante gli attacchi
- Preferisci TOTP o chiavi hardware; evita l'SMS ogni volta che possibile
- Proteggi i flussi di recupero con verifica a più fattori o email e impone periodi di attesa
- Fornisci codici di recupero di backup e incoraggia gli utenti a memorizzarli in modo sicuro
- Implementa ritardi progressivi o blocchi con valutazione del rischio IP/dispositivo
- Applica WAF e limitazione di velocità alle API e ai moduli di accesso
- Monitora l'attacco di credential stuffing e incoraggia gli utenti ad adottare password uniche
- Usa un gestore di password affidabile per l'archiviazione e la compilazione automatica
- Non condividere mai le password in chiaro tramite chat o email; utilizza strumenti di gestione segreti per i team
- Se scrivi le password offline, assicurati della sicurezza fisica
Come generare password tramite linguaggi di programmazione
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);
}