2011-01-04 4 views
3

Utilisation du code EF Tout d'abord, comment puis-je interrompre la sauvegarde d'une valeur de champ pour pouvoir la hacher? Un exemple simple serait un champ de mot de passe:Comment hacher ou chiffrer un champ avec EF CodeFirst?

public class Account 
{ 
    private string _password; 

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

Cela semble fonctionner lors de l'enregistrement de la valeur à la base de données, mais ne fonctionne pas lors de la récupération de la valeur.

ÉDIT: Modifié _password = MyHashMethod (_password) en MyHashMethod (valeur) ci-dessus. La même correction doit être faite dans la réponse ci-dessous.

+0

Je ne comprends probablement pas votre question. Lorsque vous enregistrez un mot de passe haché dans la base de données, il est stocké en haché et vous n'avez plus besoin de le hacher lorsque vous le chargez, n'est-ce pas? De plus, le hachage est une opération à sens unique (ok, vous pouvez casser le hachage, mais c'est une histoire différente), donc quand vous chargez le mot de passe hashed de DB, vous ne pouvez pas le "décoder" à la valeur originale. Si vous voulez le faire, vous avez besoin d'un cryptage/décryptage qui, en cas de mots de passe, est moins sécurisé. –

+0

Vous n'avez pas besoin de le hacher à nouveau lorsque vous le chargez, mais vous devez (dans le cas de l'exemple de mot de passe ci-dessus au moins) charger le hachage à partir de la base de données afin de le comparer. Il ne s'agit donc pas de déchiffrer la valeur enregistrée, mais de faire un hachage unidirectionnel lors de l'écriture et de lire la valeur hachée lors de la lecture. –

+0

Ce problème et cette solution s'appliquent à tous les utilisateurs d'Entity Framework (pas uniquement ceux qui utilisent le code d'abord) – DamienG

Répondre

6

Je voudrais juste faire comme:

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

seulement HashedPassword est stocké dans DB.

Questions connexes