2012-04-21 69 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