3

データコントラクトでデータメンバーのパスワードをハッシュ/ソルトしようとしていますが、新しい学生を追加してからその学生コレクションを取得すると、パスワードフィールドがハッシュ/ソルトされていないため、入力したものとして返されますか?

    public void AddStudent(Student student)
    {

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

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

誰かがこれを修正するのを手伝ってもらえますか?

4

2 に答える 2

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);
}
于 2012-04-21T22:51:47.793 に答える
1

これを元の質問に追加するだけでもかまいませんが、さらにコードをいくつか示します。

[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;

    // ...
于 2012-04-21T22:55:40.817 に答える