Acabo de implementar algo como esto para almacenar una contraseña proporcionada por el usuario. Convertí el resultado encriptado en una cadena codificada en base 64, para poder almacenarlo fácilmente en la configuración de usuario de mi aplicación.
De su pregunta, parece que su usuario malintencionado está realmente utilizando su aplicación, por lo que esto solo proporcionará ofuscación. Aunque no se revelaría ninguna clave mediante el uso de Reflector, el texto sin formato sería visible en un depurador.
static byte[] entropy = { 65, 34, 87, 33 };
public string Password
{
get
{
if (this.EncryptedPassword == string.Empty)
{
return string.Empty;
}
var encrypted = Convert.FromBase64String(this.EncryptedPassword);
var data = ProtectedData.Unprotect(encrypted, entropy, DataProtectionScope.CurrentUser);
var password = Encoding.UTF8.GetString(data);
return password;
}
set
{
if (value == string.Empty)
{
this.EncryptedPassword = string.Empty;
return;
}
var data = Encoding.UTF8.GetBytes(value);
var encrypted = ProtectedData.Protect(data, entropy, DataProtectionScope.CurrentUser);
var stored = Convert.ToBase64String(encrypted);
this.EncryptedPassword = stored;
}
}
Debe cambiar el título "Mejores prácticas para el cifrado de contraseñas", ya que descifrar las contraseñas definitivamente NO es la mejor práctica. – devlord
No, no debería; esa sería una pregunta completamente diferente. – Eyvind
La mejor práctica para descifrar la contraseña es: NO HACERLO. – saluce