2

如何将密码哈希转换为字符串?

    public void AddStudent(Student student)
    {
        student.StudentID = (++eCount).ToString();
        byte[] passwordHash = Hash(student.Password, GenerateSalt());
        student.Password = passwordHash; //this line?
        student.TimeAdded = DateTime.Now;
        students.Add(student);
    }

如果我尝试:

    public void AddStudent(Student student)
    {
        student.StudentID = (++eCount).ToString();
        byte[] passwordHash = Hash(student.Password, GenerateSalt());
        student.Password = Convert.ToString(passwordHash); //this line?
        student.TimeAdded = DateTime.Now;
        students.Add(student);
    }

当我获取我的学生集合时,密码字段会显示 System.Byte[] 我想在哪里取回散列/加盐密码?

4

3 回答 3

4

您可以使用Convert.ToBase64String 方法

student.Password = Convert.ToBase64String(passwordHash);
于 2012-04-22T00:12:11.467 回答
2

字节序列可以以无限的方式表示为字符串,因此您的问题没有一个有效的答案。

已经提供的使用 Convert.ToBase64String() 的解决方案是有效的,但不是您可以使用的唯一解决方案。

如果您查看msdn 上 HashAlgorithm.ComputeHash 方法的文档 ,字节数组将使用如下代码转换为十六进制表示:

        var sb = new StringBuilder();
        for (int i = 0; i < passwordHash.Length; i++)
            sb.Append(passwordHash[i].ToString("x2"));
        student.Password = sb.ToString();

这只是另一个例子。

于 2012-04-22T00:34:41.880 回答
-2
student.Password = Encoding.GetString(passwordHash);

这会将字节数组转换为字符串。一个快速的谷歌搜索会告诉你关于操作字节数组等你需要知道的一切......

于 2012-04-21T23:58:56.937 回答