2017-01-20 2 views
0

나는이 POCO 클래스가 : 나는 내 데이터베이스에서 데이터를 읽을 때/암호 해독 Password 필드를 암호화 할 수있는 방법C 번호, 단정 한, 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 개체에 액세스 할 때 기음#?

나는이 같은 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 필드가 제대로 해독, 괜찮습니다,하지만 난에서 개체에 액세스 할 때 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에서 암호 해독을 두 번 피하는 법을 제안합니다.

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, 좋은 생각 –