Ho appena implementato qualcosa di simile per l'archiviazione di una password fornita dall'utente. Ho convertito il risultato crittografato in una stringa codificata in base 64, in modo da poterlo facilmente archiviare nelle impostazioni utente della mia applicazione.
Dalla tua domanda, sembra che l'utente malintenzionato è in realtà utilizzando la vostra applicazione, quindi questo fornirà solo offuscamento. Sebbene nessuna chiave venga rivelata attraverso l'uso di Reflector, il testo in chiaro sarebbe visibile in un debugger.
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;
}
}
fonte
2009-09-04 05:03:43
Dovrebbe essere intitolato "Procedure ottimali per la crittografia delle password", poiché la decrittografia delle password è decisamente NON la procedura migliore. – devlord
No, non dovrebbe; questa sarebbe una domanda completamente diversa. – Eyvind
Le migliori pratiche per la decrittografia della password sono: NON FARLO. – saluce