AESCrypt – Libreria AES 128 / AES 192 / AES 256 per ASP.NET C# con opzioni avanzate Una libreria ASP.NET C# che implementa l'algoritmo AES-Rijndael per gestire in modo semplice l'encrypting AES 128, AES 192 e AES 256 con una serie di parametri e funzionalità avanzate: Key Length, Hash, Padding Mode, Cipher Mode, Salt, IV e altro

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

L’algoritmo di cifratura AES 256 / Rijndael vanta già numerose implementazioni in ambito ASP.NET C#: progetti come BouncyCastle, SharpAESCrypt e CryptoN, solo per menzionare alcuni tra i più noti e diffusi, sono molto semplici da utilizzare e funzionano alla perfezione. Che bisogno c’è, dunque, di realizzare un’ennesima libreria di data-encryption AES 256 C#?

La risposta è grossomodo la stessa che normalmente diamo quando ci tocca, nostro malgrado, “reinventare la ruota”; è la medesima ragione che ci ha spinto a realizzare il nostro generatore di password casuali in C#, il convertitore PDF-to-TXT e PDF-to-HTML e molte altre classi helper per C#, PHP e altri linguaggi di programmazione back-end: avevamo bisogno di fare qualcosa che non era possibile fare con le alternative open-source già esistenti. Questa volta avevamo la necessità di configurare alcuni aspetti particolarmente avanzati dell’algoritmo di cifratura AES, o meglio di avere la possibilità di poterli modificare a nostro piacimento per poterli adattare alle varie librerie utilizzate dai nostri clienti e, in massima parte, ben poco “configurabili”. Abbiamo così realizzato un oggetto in grado di accettare un set molto ampio di parametri esterni, così da avere modo di poter configurare il BlockSize, il Cipher mode, l’hash e il salt da utilizzare per la password (e relativo algoritmo), il numero di password hash iterations, l’Initialization Vector (IV), la lunghezza della chiave ovvero del KeyLength (nel caso in cui non vogliamo determinarla dinamicamente in base al bit-length della password utilizzata), il Salt, il Padding mode, e così via.

Il risultato dei nostri sforzi ha preso il nome di AESCrypt ed è al momento disponibile su GitHub su licenza Apache License 2.0, in attesa di avere il tempo e la voglia di pubblicarlo su NuGet. L’utilizzo è estremamente semplice e molto simile agli altri pacchetti AES disponibili, prevedendo un costruttore minimale – valido in tutti i casi in cui non abbiamo bisogno di configurare l’algoritmo di encryption in modo particolare – e un costruttore più avanzato che prevede la presenza di un oggetto di configurazione specifico contenente tutte le opzioni e impostazioni avanzate.

Esempi di uso

Di seguito vengono forniti alcuni casi di utilizzo comune, attraverso l’utilizzo dei metodi encrypt e decrypt in un tipico scenario applicativo:

Come è possibile vedere, possiamo utilizzare il costruttore semplice – con passPhrase e (opzionalmente) Initialization Vector – oppure il costruttore avanzato, al quale passare un oggetto AESCryptOptions opportunamente configurato.

Codice Sorgente

Il progetto AESCrypt è distribuito su licenza Apache License 2.0 ed è disponibile su GitHub: il nostro consiglio è di scaricarlo direttamente da lì, così da essere sicuri di prendere la versione più recente ed aggiornata.

Nei paragrafi seguenti presenteremo in dettaglio il funzionamento della libreria e pubblicheremo il codice sorgente completo di tutte le classi, corredato delle opportune spiegazioni e aggiornato alla data odierna: 13 luglio 2018.

La libreria si compone di tre classi:

  • AESCrypt – il motore di encryption vero e proprio, contenente i metodi EncryptDecrypt e le relative implementazioni: queste ultime sono state realizzate facendo uso delle classi     e    disponibili nel namespace   di ASP.NET.
  • AESCryptOptions – una classe POCO contenente le opzioni di encrypt/decrypt AES, preimpostate con le impostazioni predefinite più comuni.
  • AESPasswordHash – un semplice ENUM contenente le diverse possibilità di password hashing – SHA1, MD5 or None.

AESCrypt.cs

Iniziamo con la classe principale, ovvero AESCrypt (file AESCrypt.cs):

AESCryptOptions.cs

Questa è la classe POCO AESCryptOptions (file AESCryptOptions.cs):

AESPasswordHash.cs

Infine, questo è l’enum AESPasswordHash (file AESPasswordHash.cs):

Tutte le classi di cui sopra sono provviste di una documentazione inline che spiega le funzionalità principali di ciascun metodo: non dovrebbe quindi essere difficile orientarsi per uno sviluppatore, a prescindere dal livello di esperienza… è sufficiente seguire le indicazioni fornite dall’Intellisense.

Anche per questa volta è tutto: ci auguriamo che questa libreria possa venire incontro alle esigenze di qualche altro sviluppatore ASP.NET che si troverà con l’esigenza di dover implementare l’algoritmo di encryption AES all’interno del proprio progetto!

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane.

View all posts by Ryan