Skip to main content

PasswordCheck – Classe C# per calcolare il livello di sicurezza delle password

Diversi anni fa ho sviluppato questa classe per calcolare il livello di sicurezza delle password inserite dagli utenti in varie circostanze, come ad esempio durante la registrazione di un nuovo account all’interno di una applicazione web. Poiché a distanza di tempo continuo a utilizzarla con regolarità ho deciso oggi di condividerla all’interno di questo post, sperando che possa essere utile anche a qualcun altro.

La classe può essere utilizzata in due modi:

  • Attraverso il metodo generico GetPasswordStrength, che calcola il livello di sicurezza (strength) di una qualsiasi password attraverso una serie di controlli basati sui classici fattori: lunghezza minima, presenza di lettere maiuscole/minuscole, numeri e/o caratteri speciali.
  • Attraverso il metodo IsStrongPassword, che risponde a un criterio più specifico e personalizzato.

Il primo metodo di utilizzo è particolarmente indicato in tutti i casi in cui non sono previste delle policy di controllo specifiche, mentre il secondo si rende necessario ogniqualvolta abbiamo dei controlli obbligatori da effettuare. Personalmente io finisco spesso per utilizzare entrambi: il primo per mostrare all’utente la forza della propria password, il secondo – o una sua implementazione leggermente diversa utilizzando gli helper methods inclusi – per controllare i requisiti minimi previsti e/o richiesti dal committente.

Tutti i metodi utilizzati sono spiegati all’interno della classe, quindi non c’è molto altro da dire: se la classe vi è di qualche aiuto, sentitevi liberi di lasciare un feedback nella sezione “commenti” in basso!

Approfondisci

Istanziare un Dictionary con chiavi Case-Insensitive in ASP.NET C#

Tra le varie classi messe a disposizione da ASP.NET, il Dictionary resta una  di quelle più utilizzate: la sua enorme versatilità compensa ampiamente la relativa inefficienza che si presenta in alcune situazioni, dove l’utilizzo di un Hashtable o di una classe più snella consentirebbe di ottenere prestazioni migliori.

Nella maggior parte dei casi, quando utilizziamo un Dictionary impostando una stringa come chiave (key), la modalità predefinita di confronto tra stringhe prevista dalla classe, che risponde a un criterio case-sensitive – considerando quindi rilevante la differenza tra lettere maiuscole e minuscole all’interno della chiave – può fare al caso nostro:

E così via. Il Dictionary di cui sopra avrà quindi tre diverse entries, ciascuna accessibile mediante la propria chiave case-sensitive specifica.

Vi sono casi, però, in cui questo comportamento predefinito non ci è di grande aiuto: fortunatamente, il costruttore della classe prevede un overload specifico che possiamo utilizzare in tutti i casi in cui vogliamo che il confronto tra le chiavi-stringa risponda a un criterio diverso. Qualora volessimo un confronto case-insensitive, ad esempio, potremmo istanziare la classe nel seguente modo:

Approfondisci

Classe C# per serializzare e deserializzare oggetti in XML e JSON in ASP.NET

A grande richiesta condivido un piccolo helper, realizzato ormai diversi anni orsono, che ancora utilizzo quando ho bisogno di effettuare operazioni di Serialize/Deserialize di oggetti POCO in C#: i formati supportati al momento sono XML e JSON, ovvero i più diffusi e utilizzati in ambito web, ma è possibile estenderla anche ad altri.

Come potrete vedere si tratta di una semplice classe statica che include una serie di “coppie di metodi” per la serializzazione e deserializzazione corrispondente: il primo elemento di ciascuna coppia – quello che si occupa della serializzazione di un oggetto T – è stato implementato in modo tale da poter essere utilizzato anche come  extension method, ovvero partendo direttamente dall’oggetto che si desidera serializzare. Può essere utilizzata all’interno di qualsiasi libreria di classi o anche direttamente inclusa in un progetto Web Forms, Windows Forms, MVC, WebAPI, .NET Core o di qualsiasi altro tipo.

Questo l’elenco dei metodi attualmente implementati:

  • SerializeObject / DeserializeObject
  • SerializeObjectUsingBinaryFormatter / DeserializeObjectUsingBinaryFormatter
  • SerializeToXML / DeserializeFromXML
  • SerializeToJson / DeserializeFromJson

Approfondisci

Classe ASP.NET C# per il controllo e il calcolo formale del Codice Fiscale

Non c’è programmatore italiano (o che abbia lavorato in Italia) che non si sia dovuto cimentare almeno una volta con processi di verifica, calcolo e/o controllo formale del Codice Fiscale: si tratta di un evergreen dello sviluppo software del nostro paese, necessario in qualsiasi contesto che coinvolga la gestione dei dati personali di qualcuno: anagrafiche, flussi, gestionali, strumenti di calcolo economico/finanziario… I campi di applicazione sono pressoché infiniti e tutti, immancabilmente, richiedono prima o poi di svolgere una o più delle summenzionate operazioni.

Per questo motivo, ormai molti anni fa, ho sviluppato una classe in ASP.NET C# che consente di svolgere la maggior parte di queste operazioni. Poiché a distanza di molti anni continuo a utilizzarla moltissimo ritengo che possa essere utile condividerla, nella speranza che possa semplificare la vita di altri colleghi sviluppatori.

Approfondisci

TimeTracker: una classe C# per misurare il tempo di esecuzione del codice

Una delle esigenze più sentite – e più importanti – quando si scrive codice è quella di trovare il modo di svolgere l’attività richiesta garantendo le migliori prestazioni possibili. Per far questo è indispensabile dotarsi di uno strumento che ci consentano di misurare il tempo di esecuzione di ciascuna operazione o blocco di operazioni, possibilmente in unità di tempo adeguate (millisecondi o nanosecondi) e con una precisione il più possibile accurata.

Ovviamente, tale strumento deve dare la possibilità di misurare più operazioni all’interno del medesimo contesto di esecuzione,  in modo che sia possibile definire vari lap e confrontarli tra loro: insomma, stiamo parlando in buona sostanza di qualcosa che fornisca le funzionalità tipiche di un comune cronometro.

Con questo obiettivo in mente alcuni anni fa ho sviluppato una classe che consente di fare esattamente questo. Il suo nome è TimeTracker e può essere utilizzata per creare un numero n di lap nel corso dell’esecuzione di un qualsiasi programma. Ciascun lap, una volta creato, può essere confrontato con qualsiasi altro lap sulla base di uno dei formati temporali disponibili: nanosecondi, microsecondi, millisecondi, secondi, minuti o ore.

Approfondisci

Close