datamembers密码没有哈希?

时间:2012-04-21 22:47:21

标签: c# wcf linq web-services hash

我正在尝试在我的datacontracts中对我的datamembers密码进行哈希/盐化,但是当我添加一个新学生然后获取该学生集合时,密码字段没有被哈希/盐渍,它会像我输入的那样回来?

    public void AddStudent(Student student)
    {

        student.StudentID = (++eCount).ToString();
        byte[] passwordHash = Hash(student.Password, GenerateSalt());

        student.TimeAdded = DateTime.Now;
        students.Add(student);
    }

有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您应该将散列密码分配给学生密码,然后添加学生。

public void AddStudent(Student student)
{
    student.StudentID = (++eCount).ToString();
    byte[] passwordHash = Hash(student.Password, GenerateSalt());

    StringBuilder stringBuilder = new StringBuilder();

    foreach(byte b in passwordHash){
        stringBuilder.AppendFormat("{0:X2}", b);
    }

    student.TimeAdded = DateTime.Now;
    student.Password= stringBuilder.ToString();;
    students.Add(student);
}

答案 1 :(得分:1)

您可以将其添加到orginal question,但这里还有一些代码:

[DataContract(Name="Student")]
public class Student
{
    [DataMember(Name = "StudentID")]
    public string StudentID { get; set; }
    [DataMember(Name = "FirstName")]
    public string FirstName { get; set; }
    [DataMember(Name = "LastName")]
    public string LastName { get; set; }
    // local non public cache
    private byte[] _password;
    [DataMember(Name = "Password")]
    public byte[] Password {
        get { return _password; }
        set {
            this.Salt = GenerateSalt();
            this._password = Hash(value, this.Salt);
        }
    };
    [DataMember(Name = "Salt")]
    public byte[] Salt;

    // ...