我正在尝试在我的datacontracts中对我的datamembers密码进行哈希/盐化,但是当我添加一个新学生然后获取该学生集合时,密码字段没有被哈希/盐渍,它会像我输入的那样回来?
public void AddStudent(Student student)
{
student.StudentID = (++eCount).ToString();
byte[] passwordHash = Hash(student.Password, GenerateSalt());
student.TimeAdded = DateTime.Now;
students.Add(student);
}
有人可以帮忙解决这个问题吗?
答案 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;
// ...