C# 存储哈希值

C# 存储哈希值,c#,linq,authentication,hash,salt,C#,Linq,Authentication,Hash,Salt,有没有一种存储这种散列方法的盐的方法?我不知道怎么做 谢谢 public void AddStudent(Student student) { student.StudentID = (++eCount).ToString(); student.Salt = GenerateSalt(); byte[] passwordHash = Hash(student.Password, student.Salt); stu

有没有一种存储这种散列方法的盐的方法?我不知道怎么做

谢谢

    public void AddStudent(Student student)
    { 
        student.StudentID = (++eCount).ToString();
        student.Salt = GenerateSalt();
        byte[] passwordHash = Hash(student.Password, student.Salt);
        student.Password = Convert.ToBase64String(passwordHash);
        student.TimeAdded = DateTime.Now;
        students.Add(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; }
[DataMember(Name = "Password")]
public string Password;
[DataMember(Name = "Salt")]
public byte[] Salt;

protected RNGCryptoServiceProvider random = new RNGCryptoServiceProvider();

public byte[] GenerateSalt()
{
    byte[] salt = new byte[10];
    random.GetNonZeroBytes(salt);
    return salt;
} 

public static byte[] Hash(string value, byte[] salt)
{
    return Hash(Encoding.UTF8.GetBytes(value), salt);
}

public static byte[] Hash(byte[] value, byte[] salt)
{
    byte[] saltedValue = value.Concat(salt).ToArray();

    return new SHA256Managed().ComputeHash(saltedValue);
}

public void AddStudent(Student student)
{
    byte[] salt = GenerateSalt();

    student.StudentID = (++eCount).ToString();
    byte[] passwordHash = Hash(student.Password, salt);
    student.Salt = salt;
    student.Password = Convert.ToBase64String(passwordHash);
    student.TimeAdded = DateTime.Now;
    students.Add(student);
}

您可以将其存储在
字节[]
中。实际问题是什么?在学生对象上创建一个新的字段salt,然后在生成salt()时,将salt放在字段中?抱歉,我仍然有点迷茫我是否将salt作为数据成员放在学生中?然后说类似于
byte[]passwordHash=Hash(student.Password,GenerateSalt(student.Salt))是的,你可以这样做。盐不必保密。感谢Lordcheeto(顺便说一句,Cheeto太棒了!)我已经用一个可能的答案更新了我的问题,它看起来正确吗?我想你不需要
byte[]Salt=GenerateSalt()如果据我所知,datamember已经是一个字节[]?@KirstyWhite,那么它看起来是正确的。是的,我只是没有花太多的心思。你花了几秒钟的时间,我花了好几个小时,哈哈,但是大家都是按照自己的节奏学习的。现在开始尝试将我的哈希值与学生密码进行比较。@KirstyWhite噢,注意到可能有错误:
byte[]passwordHash=hash(student.password,GenerateSalt())。除非您将旧的、不安全的密码转换为咸哈希,否则您将希望从学生或其他人那里获取密码。