Se si intende solo verificare / convalidare il nome utente e la password immessi, utilizzare la classe Rfc2898DerivedBytes (nota anche come funzione di derivazione della chiave basata su password 2 o PBKDF2). Questo è più sicuro rispetto all'utilizzo di crittografia come Triple DES o AES perché non esiste un modo pratico per tornare dal risultato di RFC2898DerivedBytes alla password. Puoi solo passare da una password al risultato. Vedere È consentito utilizzare l'hash SHA1 della password come salt quando si ricava la chiave di crittografia e IV dalla stringa della password? per un esempio e una discussione per. Net o String crittografare / decrittografare con password c # Metro Style per WinRT / Metro.
Se si memorizza la password per il riutilizzo, ad esempio per fornirla a una terza parte, utilizzare l' API di protezione dei dati di Windows (DPAPI) . Utilizza le chiavi generate e protette dal sistema operativo e l' algoritmo di crittografia Triple DES per crittografare e decrittografare le informazioni. Ciò significa che la tua applicazione non deve preoccuparsi di generare e proteggere le chiavi di crittografia, una delle principali preoccupazioni quando si utilizza la crittografia.
In C #, usa la classe System.Security.Cryptography.ProtectedData . Ad esempio, per crittografare un dato, usa ProtectedData.Protect():
// Data to protect. Convert a string to a byte[] using Encoding.UTF8.GetBytes().
byte[] plaintext;
// Generate additional entropy (will be used as the Initialization vector)
byte[] entropy = new byte[20];
using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(entropy);
}
byte[] ciphertext = ProtectedData.Protect(plaintext, entropy,
DataProtectionScope.CurrentUser);
Memorizza l'entropia e il testo cifrato in modo sicuro, ad esempio in un file o in una chiave di registro con le autorizzazioni impostate in modo che solo l'utente corrente possa leggerli. Per accedere ai dati originali, utilizzare ProtectedData.Unprotect():
byte[] plaintext= ProtectedData.Unprotect(ciphertext, entropy,
DataProtectionScope.CurrentUser);
Notare che esistono ulteriori considerazioni sulla sicurezza. Ad esempio, evita di memorizzare segreti come password come file string. Le stringhe sono immutabili, poiché non possono essere notificate in memoria, quindi qualcuno che guarda la memoria dell'applicazione o un dump della memoria potrebbe vedere la password. Utilizzare invece SecureString o un byte [] e ricordarsi di eliminarli o azzerarli non appena la password non è più necessaria.