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())代码>。除非您将旧的、不安全的密码转换为咸哈希,否则您将希望从学生或其他人那里获取密码。