Wenn Sie nur den eingegebenen Benutzernamen und das Kennwort bestätigen/bestätigen möchten, verwenden Sie die Klasse Rfc2898DerivedBytes (auch bekannt als passwortbasierte Schlüsselableitungsfunktion 2 oder PBKDF2). Dies ist sicherer als eine Verschlüsselung wie Triple DES oder AES, da es keinen praktischen Weg gibt, vom Ergebnis von RFC2898DerivedBytes zurück zum Passwort zu gelangen. Sie können nur von einem Passwort zum Ergebnis gehen. Ein Beispiel und eine Diskussion für .Net oder String encrypt/decrypt with password c# Metro Style für WinRT/Metro finden Sie unter Is it ok to use SHA1 hash of password as a salt when deriving encryption key and IV from password string?.
Wenn Sie das Passwort für die Wiederverwendung speichern, z. B. für die Weitergabe an Dritte, verwenden Sie . Dies verwendet vom Betriebssystem generierte und geschützte Schlüssel und den Verschlüsselungsalgorithmus Triple DES zum Verschlüsseln und Entschlüsseln von Informationen. Das bedeutet, dass Ihre Anwendung sich nicht darum kümmern muss, die Verschlüsselungsschlüssel zu generieren und zu schützen, was bei der Verwendung von Kryptografie eine wichtige Rolle spielt.
Verwenden Sie in C# die Klasse System.Security.Cryptography.ProtectedData. Um zum Beispiel ein Stück von Daten zu verschlüsseln, verwenden 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);
Shop die Entropie und verschlüsselten Text sicher, wie in einer Datei oder einen Registrierungsschlüssel mit Berechtigungen festgelegt, so dass nur der aktuelle Benutzer sie lesen kann. Um den Zugriff auf die Originaldaten zu erhalten, verwenden ProtectedData.Unprotect()
:
byte[] plaintext= ProtectedData.Unprotect(ciphertext, entropy,
DataProtectionScope.CurrentUser);
Hinweis, dass es zusätzliche Sicherheitsüberlegungen. Vermeiden Sie z. B. das Speichern von geheimen Passwörtern wie string
.Zeichenfolgen sind unveränderlich, da sie nicht im Speicher gemeldet werden können, sodass jemand, der den Speicher der Anwendung oder einen Speicherauszug betrachtet, das Kennwort sehen kann. Verwenden Sie stattdessen SecureString oder ein Byte [] und denken Sie daran, sie zu entsorgen oder auf Null zu setzen, sobald das Passwort nicht mehr benötigt wird.
Zuallererst, speichern Sie das Passwort nicht. Hash es (möglicherweise mit einem Salz-Wert), und speichern Sie stattdessen. – carlosfigueira
"Benutzer" meinen Sie normale Windows-Benutzer oder etwas anderes? (Ich denke du meinst einige von euch eigenen "Benutzern", da normale Windows-Benutzer ihre Daten gegenseitig nicht sehen können ...) –
Ich habe deinen Titel bearbeitet. Bitte lesen Sie "[Sollten die Fragen" Tags "in ihren Titeln enthalten?] (Http://meta.stackexchange.com/questions/19190/)", wobei der Konsens "nein, sie sollten nicht" lautet. –