Frage

Ich brauche verschlüsselte Daten zu speichern (einige kleine Strings) zwischen Anwendung ausgeführt wird. Ich will nicht der Benutzer ein Passwort (s) jedes Mal schaffen, er startet die Anwendung. D. h doch es geht nach unten sicher den Verschlüsselungsschlüssel zu speichern (s).

Ich war auf der Suche in RSACryptoServiceProvider und mit PersistentKeyInCsp, aber ich bin nicht sicher, wie es funktioniert. Ist der Schlüsselcontainer persistent zwischen Anwendung läuft oder die Maschine neu gestartet wird? Wenn ja, ist es benutzerspezifische oder maschinenspezifisch. D. h wenn ich in Benutzer-Roaming-Profil meine verschlüsselten Daten zu speichern, kann ich entschlüsseln die Daten, wenn sich der Benutzer anmeldet auf einer anderen Maschine?

Wenn die oben nicht funktioniert, was sind meine Optionen (Ich brauche mit Roaming-Profile umgehen).

War es hilfreich?

Lösung

Die Data Protection API (DPAPI) tut genau das, was Sie wollen. Es bietet symmetrische Verschlüsselung von beliebigen Daten, mit den Anmeldeinformationen der Maschine oder (besser) den Benutzer, als Verschlüsselungsschlüssel. Sie müssen sich keine Sorgen über die Schlüssel zu verwalten; Windows kümmert sich um das für Sie. Wenn der Benutzer sein Passwort ändert, wird Windows die Daten erneut verschlüsseln das neue Kennwort des Benutzers verwendet wird.

DPAPI wird in .NET mit der System.Security.Cryptography.ProtectedData Klasse ausgesetzt:

byte[] plaintextBytes = GetDataToProtect();
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser);

Der zweite Parameter der Protect-Methode ist ein optionaler Entropie-Byte-Array, das als zusätzliches anwendungsspezifische „Geheimnis“ verwendet werden kann.

So zu entschlüsseln, verwenden Sie den ProtectedData.Unprotect Aufruf:

byte[] encodedBytes = GetDataToUnprotect();
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser);

DPAPI funktioniert ordnungsgemäß mit Roaming-Profile (wie hier ), obwohl Sie brauchen speichern der verschlüsselten Daten an einem Ort (Netzwerkfreigabe IsolatedStorage mit IsolatedStorageScope .Roaming , etc.), dass Ihre verschiedenen Maschinen zugreifen können.

Sehen Sie die ProtectedData Klasse in MSDN für weitere Informationen. Es gibt einen DPAPI Whitepaper hier , mit mehr Informationen, als würden Sie jemals möchten.

Andere Tipps

Ich möchte den DPAPI Ansatz hinzuzufügen.

Obwohl ich nicht implementiert der Anwender-Speicher selbst nähert, gibt es Microsoft-Dokumentation für ein Benutzer-Store-Konzept, das verschlüsselt und entschlüsselt Daten für einen bestimmten Benutzer.

Ich benutzte die DPAPI mit Computerspeicher. Ich werde es für den Fall, beschreiben sie paßt mit dem, was Sie zu tun suchen. Ich habe einen Windows-Dienst ein Windows-Benutzerprofil zu laden und dieses Kennwort des Benutzers wird verwendet, um Daten zu verschlüsseln.

Als Randbemerkung, DPAPI verwendet Triple-DES, die etwas schwächer sein kann (als AES), aber dann bin ich sicher nicht, welche Art von Schutz Sie suchen.

Windows-Datenschutz http://msdn.microsoft.com/en-us/library/ms995355. aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top