【问题标题】:datamembers password not hashed?数据成员密码没有散列?
【发布时间】:2012-04-21 22:47:21
【问题描述】:

我正在尝试在我的数据合同中对我的数据成员密码进行散列/加盐,但是当我添加一个新学生然后获取该学生集合时,密码字段尚未经过散列/加盐,它会在我输入的内容中返回?

    public void AddStudent(Student student)
    {

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

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

谁能帮忙解决这个问题?

【问题讨论】:

    标签: c# wcf linq web-services hash


    【解决方案1】:

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

    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);
    }
    

    【讨论】:

    • 嗯,如果我尝试无法将 byte[] 转换为 string,如果我将数据成员更改为 public byte[] Password;,那么当我尝试使用密码 ARGH 添加新学生时,我会收到 400 错误请求永无止境!
    • 只存储字节数组;-)
    • 怎么样?我在 POST AddStudent 时使用字符串生成器(请参阅更新的代码)
    • 只需使用此链接将散列字节数组转换为字符串stackoverflow.com/questions/8766038/…
    • @Gandil 仍然不确定如何用我的方法做到这一点?
    【解决方案2】:

    您可以简单地将其添加到您的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;
    
        // ...
    

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 2020-11-09
      • 1970-01-01
      • 2011-08-10
      • 2013-03-09
      • 2018-05-16
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多