2011-01-04 11 views
3

EFコードの使用まず、フィールド値の保存を中断してハッシュすることができますか?簡単な例は、パスワードフィールドのようになります。EF CodeFirstでフィールドをハッシュまたは暗号化するにはどうすればよいですか?

public class Account 
{ 
    private string _password; 

    public string Password 
    { 
     get 
     { 
      return _password; 
     } 
     set 
     { 
      _password = MyHashMethod(value); 
     } 
    } 
} 

これは、データベースに値を保存するときに動作しているように見えますが、値を取得する際には動作しません。

編集: 上記のMyHashMethod(value)に_password = MyHashMethod(_password)を変更しました。以下の答えで同じ修正を行う必要があります。

+0

私はおそらくあなたの質問を理解していません。ハッシュされたパスワードをデータベースに保存すると、ハッシュが保存され、読み込んだときに再度ハッシュする必要はありませんか?さらにハッシュは一方向の操作です(ハッシュを破ることもできますが、それは別の話です)。ハッシュされたパスワードをDBからロードすると、元の値に「デコード」できません。もしあなたがそれをしたいのであれば、パスワードの安全性がより低い安全な暗号化/復号化が必要です。 –

+0

あなたはそれを読み込むときにもう一度ハッシュする必要はありませんが、(上記のパスワードの例では少なくとも)それを比較するためにデータベースからハッシュをロードする必要があります。つまり、保存された値の暗号化を解除するのではなく、書き込み時に一方向のハッシュを行い、読み取り時にハッシュ値を読み取ることです。 –

+0

この問題と解決策は、Entity Frameworkの全ユーザー(コードファーストを使用するユーザーだけでなく) – DamienG

答えて

6

私はそれが好きになるだろう:

public class Account { 
    public string HashedPassword { get; set; } 
    public string ClearTextPassword { 
     set { HashedPassword = MyHashMethod(value); } 
    } 
} 

のみHashedPasswordは、DBに格納されます。

関連する問題