2017-01-20 29 views
0

私はこのPOCOクラスがあります:私は私のデータベースからデータを読み込み、時に/復号化Passwordフィールドを暗号化するために行うことができますどのようにのC#、Dapperの、POCOおよび暗号化/復号化は

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; 
    } 

を私はから私のPOCOオブジェクトにアクセスするときC#?

は、私はこのような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; 
    } 

しかし、オブジェクトは、私のデータベースからのデータで満たされているとき、すべてがPasswordフィールドが正しく復号化し、OKですが、私はからオブジェクトにアクセスするときC#をテキストフィールドに表示すると、getプロパティは再びデータを暗号化します。/

+3

パスワードを復号化する機能を持っている場合は、間違っています。 [必要な読解](http://stackoverflow.com/q/1054022/335858)。 – dasblinkenlight

+3

**パスワードを暗号化しない**、攻撃者がDBを取得したときに暗号化キーも取得する。約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 'password_hash' /' password_verify'、 'PBKDF2'(別名' Rfc2898DeriveBytes')、 'Bcrypt'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 – zaph

+0

ヒントをありがとう:) –

答えて

0

これはDapperとは関係ありません。あなたの質問に他の人が投稿したコメントも考慮してください。

以下は、getブロックで復号化を2回回避する方法を示しています。

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

ありがとう@ a-j、良い考え –

関連する問題