Daten an einen Benutzer oder PC binden

von Maximilian Samstag, 10. Juli 2010 22:05

Will man in einem Programm sensible Informationen wie z.B. Passwörter schützen so sollte man diese beim Speichern nach Möglichkeit verschlüsseln. Um zu verhindern, dass fremde beim Zugriff auf den PC einfach die Daten kopieren und auf einem anderen PC entschlüsseln können gibt es seit Windows XP die DPAPI (Data Protection API) welche Daten so verschlüsseln kann, dass man diese nur entweder auf dem gleichen PC oder nur mit dem gleichen Benutzeraccount wieder entschlüsseln kann.

Für diese native API gibt es im .NET Framework eine Wrapperklasse mit dem Namen ProtectedData welche sich im System.Security.Cryptography-Namespace befindet. Dazu muss allerdings vorher das Assembly System.Security.dll eingebunden werden. Im folgenden ein kleines Beispiel:

//Geheimer Zusatzschlüssel um zu gewährleisten, dass nur die eigene Anwendung die Daten entschlüsseln kann.
byte[] secretBytes = new byte[] { 13, 1, 23, 44, 22, 74 };

//Die Daten als Bytearray die verschlüsselt werden sollen, z.B. ein String:
byte[] plainData = Encoding.Default.GetBytes("Hallo Welt");

//Verschlüsseln
byte[] encodedData =
System.Security.Cryptography.ProtectedData.Protect(plainData, secretBytes, System.Security.Cryptography.DataProtectionScope.CurrentUser);

//Entschlüsseln
byte[] decodedData =
System.Security.Cryptography.ProtectedData.Unprotect(encodedData, secretBytes, System.Security.Cryptography.DataProtectionScope.CurrentUser);

Bei portablen Anwendungen welche auf mehreren Rechnern ausgeführt- und die gleichen Settings verwenden sollen würde ich allerdings auf eine andere Methode setzen, sonst führt das unweigerlich zu Problemen.

Tags: , , , , , ,

Abgelegt unter: Entwicklung

Kommentare (3) -

Sven Walter
Sven Walter Germany
14.07.2010 14:33:58 #

Schöne Geschichte, Danke Smile

Antwort

harddy
harddy Austria
14.07.2010 16:24:05 #

Sehr interessant, Danke.

Darf ich auf diesem Wege eine Frage in eigener Sache stellen?
Und zwar habe ich ein riesiges Projekt bei dem jetzt (leider) erst im Nachhinein Lokalisierung hinzugefügt wird. Da wollte ich fragen, ob es eine Möglichkeit gibt in allen Forms des ganzen Projektes die Eigenschaft "localizable" auf true zu setzen ohne alle per Hand durchgehen zu müssen?!

Danke schonmal

Antwort

Niklas Rother
Niklas Rother Germany
20.07.2010 12:50:10 #

Da kann man evtl. was mit Suchen&Ersetzen in den .Designer.cs Dateien machen. Einfach mal schauen, wo das der Designer hinschreibt, und dann bei den anderen Dateien da einfügen.

Antwort

Kommentar schreiben




  Country flag
biuquote
  • Kommentar
  • Live Vorschau
Loading


Spenden

Dir gefällt meine Arbeit? Dann kannst du mich mit einer Spende über PayPal unterstützen:

PayPal Spenden /></a>

Neueste Kommentare

Comment RSS