2012-04-21 92 views
2

如何将passwordHash转换为字符串?字节为字符串散列函数?

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 []其中,因为我想要得到的散列/腌密码了?

回答

-2
student.Password = Encoding.GetString(passwordHash); 

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

+2

所有字符串都可以编码为一个字节序列,但并非所有字节序列都可以解码为一个字符串。 – dtb 2012-04-22 00:11:21

+0

dtb:你是对的,但字符串是字节序列(无论如何,北美)。因此,根据上下文,这个解决方案确实有效。如果有人没有得到理想的结果,那不是因为我错了,而是他们的设计或问题是。 – 2012-04-23 01:19:30

2

字节序列可表示为一个字符串以无限的方式所以没有一个有效的答案给你的问题。

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

如果你看的HashAlgorithm.ComputeHash method on msdn 文档字节阵列被以十六进制表示使用这样的代码转换:

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

这仅仅只是一个另一个例子。

+0

所以我不需要那么长的笨蛋? – 2012-04-22 02:32:13