La prima cosa che devi considerare è come gestisci le informazioni sensibili nel tuo codice. Ad esempio se gestisci la tua password (testo normale) usando un tipo di dati stringa, c'è il rischio che qualcuno possa prendere la tua password dalla memoria. Perché in. Net, il tipo di dati String è immutabile e non hai alcun controllo su di esso.
Quindi il modo migliore per gestire i dati sensibili delle stringhe in un'app .Net è utilizzando SecureString classe. Gestisce i dati stringa come array di byte e non è necessario preoccuparsi delle conversioni di dati, ecc. È possibile utilizzare il metodo Dispose () quando si finisce di lavorare con dati sensibili.
// Instantiate the secure string.
SecureString securePwd = new SecureString();
ConsoleKeyInfo key;
Console.Write("Enter password: ");
do {
key = Console.ReadKey(true);
// Ignore any key out of range.
if (((int) key.Key) >= 65 && ((int) key.Key <= 90)) {
// Append the character to the password.
securePwd.AppendChar(key.KeyChar);
Console.Write("*");
}
// Exit if Enter key is pressed.
} while (key.Key != ConsoleKey.Enter);
Console.WriteLine();
try {
Process.Start("Notepad.exe", "MyUser", securePwd, "MYDOMAIN");
}
catch (Win32Exception e) {
Console.WriteLine(e.Message);
}
finally {
securePwd.Dispose();
}
What is the best encryption algorithm for our case?
Spero che non stiate utilizzando la crittografia nelle password? Le password devono essere sottoposte a hash con un buon algoritmo di hash e buon sale. Non utilizzare MD5 o SHA1 perché questi sono weak hashes secondo agli standard attuali. Al momento possiamo considerare che PBKDF2 è uno dei migliori algoritmi di hashing disponibili. Il framework AspNet Identity che utilizza PBKDF2.
È possibile utilizzare l'algoritmo AES per crittografare gli altri dati sensibili. Ma tieni a mente per proteggere le tue chiavi. È possibile utilizzare a tal fine il contenitore chiave .Net