Verschlüsseln von Anmeldeinformationen in einer WPF-Anwendung
In einer WPF-Anwendung möchte ich die typischen "Remember Me" - option zum speichern von Anmeldeinformationen und verwenden Sie Sie Nächstes mal automatisch die Anwendung gestartet wird.
Mit einem one-way-hash ist eindeutig keine option, und ich kann zwar speichern von Anmeldeinformationen in einem isolierten Speicher oder in der registry, gibt es ein Thema zu behandeln, der beim verschlüsseln der Anmeldeinformationen.
Wenn ich einen symmetrischen Schlüssel-Verschlüsselung-Algorithmus, das ich bewahren muss der Schlüssel irgendwo. Und wenn der Schlüssel zum Beispiel hardcoded im Speicher, dann kann ich mir vorstellen, es wäre einfach zu demontieren .NET-assemblies, und es finden.
Was ist der beste Weg zum verschlüsseln von Anmeldeinformationen in .NET und halten Sie Sie sicher, halten Sie den Verschlüsselungsschlüssel völlig außer Reichweite?
- Werfen Sie einen Blick auf das Credential Management API: msdn.microsoft.com/en-us/library/Aa302353
- Ist der Inhalt des Artikels auch heute noch relevant? Es ist 11 Jahre alt.
- Ist es noch relevant, aber es gibt einige änderungen in der API seit Vista. Wenn man sich meine Antwort, ich benutze die Windows-Anmeldeinformationen API-auch (aber ich credential store direkt, ohne die Anmeldeinformationen verwenden, die prompt).
- stackoverflow.com/questions/17741424/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Zusammenfassung meiner blog-post: Wie ein Passwort zu speichern, Sie auf Windows?
Können Sie die Data Protection API und seine .NET-Implementierung (ProtectedData) um das Kennwort zu verschlüsseln. Hier ist ein Beispiel:
Oder verwenden Sie die Windows-Anmeldeinformations-Manager (Dies ist der Weg, den ich bevorzuge, weil es erlaubt Benutzern, backup/wiederherstellen/Bearbeiten Sie Ihre Anmeldeinformationen eingeben, auch wenn Ihre Anwendung hat keine solche Funktionalität). Ich habe ein NuGet-Paket Meziantou.Rahmen.Win32.CredentialManager. Wie man es verwendet:
Original-Antwort mit der nativen API-wrapper (Eine neuere version von diesem ist verfügbar auf GitHub):
Verwendung:
PtrToStructure<T>
ist neu mit .NET 4.5. Wenn Sie nicht verwenden .NET 4.5 verwenden, die nicht generische version und warf das ErgebnisCredDelete
Methode:[DllImport("Advapi32.dll", EntryPoint = "CredDeleteW", CharSet = CharSet.Unicode, SetLastError = true)]public static extern bool CredDelete(string target, CredentialType type, int reservedFlag);
CredFree
. Ich habe den link Hinzugefügt, um das repository in der Antwort.