Lo primero que debe considerar es cómo está administrando la información confidencial en su código. Como ejemplo, si administra su contraseña (texto sin formato) utilizando un tipo de datos de cadena, existe un alto riesgo de que alguien pueda tomar su contraseña de la memoria. Debido a que en .Net, el tipo de datos String es inmutable y no tiene ningún control sobre él.
Por lo tanto, la mejor manera de administrar datos de cadenas confidenciales en una aplicación .Net es usar SecureString class. Administra los datos de cadena como matrices de bytes y no tiene que preocuparse por las conversiones de datos, etc. Puede usar el método Dispose () cuando termine su trabajo con datos confidenciales.
// 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();
}
¿Cuál es el mejor algoritmo de cifrado para nuestro caso?
¿Espero que no esté utilizando el cifrado en las contraseñas? Las contraseñas deben estar en hash usando un buen algoritmo de sal y buen hash. No utilice MD5 o SHA1 porque son hashes débiles según a las normas vigentes. Por el momento, podemos considerar que PBKDF2 es uno de los mejores algoritmos de hashing disponibles. El marco de Identidad de AspNet que utiliza el PBKDF2.
Puede usar el algoritmo AES para cifrar sus otros datos confidenciales. Pero ten en cuenta asegurar tus llaves. Puede usar .Net Contenedor de claves para ese propósito