2017-01-20 5 views
0

Ich habe diese POCO-Klasse:C#, Dapper, POCO und Verschlüsseln/Entschlüsseln

class Users 
{ 
    public string User { get; set; } 
    public string Password { get; set; } 

    private string Encrypt(string plainText) 
    { 
     ... 
     return encryptedText; 
    } 
    private string Decrypt(string cipherText) 
    { 
     ... 
     return decryptedText; 
    } 

Wie kann ich Password Feld zum Verschlüsseln/Entschlüsseln, wenn ich Daten aus meiner Datenbank gelesen und wenn ich auf meine POCO-Objekt aus C#?

ich versuche, wie diese zu verwenden sometingh:

class Users 
{ 
    private string _password; 

    public string User { get; set; } 
    public string Password 
    { 
     get 
     { 
      return Encriptar(_password); 
     } 
     set 
     { 
      _password = Desencriptar(value); 
     } 
    } 

    private string Encrypt(string plainText) 
    { 
     ... 
     return encryptedText; 
    } 
    private string Decrypt(string cipherText) 
    { 
     ... 
     return decryptedText; 
    } 

Aber wenn die Objekte mit Daten aus der Datenbank gefüllt sind, ist alles in Ordnung, das Password Feld richtig dechiffriert, aber wenn ich Zugriff auf ein Objekt aus C# im Textfeld anzuzeigen, die get Eigenschaft ruft wieder meine Daten auf:/

+3

Wenn Sie eine Funktion haben, die ein Passwort entschlüsselt, tun Sie es falsch. [Pflichtlektüre] (http://stackoverflow.com/q/1054022/335858). – dasblinkenlight

+3

** Verschlüsseln Sie keine Passwörter **, wenn der Angreifer die DB erhält, bekommt er auch den Verschlüsselungsschlüssel. Iterate über einen HMAC mit einer zufälligen Salz für etwa 100ms Dauer und speichern Sie das Salz mit dem Hash. Verwenden Sie Funktionen wie 'password_hash' /' password_verify', 'PBKDF2' (aka' Rfc2898DeriveBytes'), 'BCrypt' und ähnliche Funktionen. Es geht darum, den Angreifer dazu zu bringen, viel Zeit mit der Suche nach Passwörtern zu verbringen. – zaph

+0

Danke für die Tipps :) –

Antwort

0

Das hat nichts mit Dapper zu tun. Beachten Sie auch die Kommentare von anderen zu Ihrer Frage.

Folgendes schlägt nur vor, wie Entschlüsselung zweimal in get Block zu vermeiden.

private string _password; 
private bool _isDecrypted = false; 
public string Password 
{ 
    get 
    { 
     if(_isDecrypted == false) 
     { 
      _password = Decrypt(_password); 
      _isDecrypted = true; 
     } 
     return (_password); 
    } 
    set 
    { 
     _password = Encrypt(value); 
     _isDecrypted = false; 
    } 
} 
+0

Danke @ a-j, gute Idee –