2012-04-25 52 views
1

在我之前的問題中,我被告知散列密碼而不是加密,結果證明是正確的。問題是,我從來沒有處理過哈希密碼,所有的文檔都說SHA512,我試圖在測試帳戶上使用SHA512無濟於事。我不確定該從哪裏出發。代碼註釋給我的例子「加密」字符串,因爲他們稱之爲,它是「FA35A0194E3BE7024CEFB1839CBFC922」,我不知道如何使用SHA512像這樣格式化它,因爲它只需要一個字節數組或流ComputeHash()方法:如何用SHA512散列密碼

byte[] hashedPassword = HashAlgorithm.Create("SHA512").ComputeHash(???); 

UPDATE

我試着打印出的字節UTF8Encoding.GetString,但它只是顯示一堆看起來完全不像一個在例如文檔廢話字符。

+0

您現在還不清楚您在問什麼。您是否要求我們幫助您瞭解如何在C#中使用SHA512類?您可以從MSDN文檔開始: http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha512.aspx – 2012-04-25 21:46:26

+0

確定asawyer,我會編輯這個... – james 2012-04-25 21:47:10

+0

嘿asawyer,這夠好嗎? – james 2012-04-25 21:55:42

回答

0

你確定它說512,因爲這是128,但無論如何,你可以使用類似

System.String Hashed = System.BitConverter.ToString(((System.Security.Cryptography.SHA512)new System.Security.Cryptography.SHA512Managed()).ComputeHash(System.Text.Encoding.ASCII.GetBytes("NotHashedPass"))).Replace("-",""); 

MessageBox.Show(Hashed); 

但ID建議至少使用鹽。

+0

現在你明白爲什麼我在這裏很困惑? – james 2012-04-25 22:00:13

+7

@godzcheater如何將該行分隔爲變量。當你試圖幫助某人理解某些事物時製作一行內容時沒有給出任何要點。 – 2012-04-26 07:34:07

+0

@Savage如果你看到原始問題,你會知道他沒有想法他的任何代碼的劑量,但是, ' System.Security.Cryptography.SHA512 SHA512 = new System.Security.Cryptography.SHA512Managed(); System.Byte [] Hash = SHA512.ComputeHash(System.Text.Encoding.ASCII.GetBytes(「NotHashedPass」)); //如果你想添加一個鹽只是做「NotHashedPass」+「SaltHere」 System.String HashStr = System.BitConverter.ToString(Hash).Replace(「 - 」,「」); MessageBox.Show(HashStr);' – godzcheater 2012-04-27 16:02:21

5

用純SHA-512散列仍然是錯誤的。使用通過Rfc2898DeriveBytes暴露的PBKDF2。

它返回原始字節,你應該用hex或base64編碼。

你可以做十六進制編碼與:

BitConverter.ToString(bytes).Replace("-","") 
+0

呃...我正在嘗試使用需要此SHA512散列函數的shitpile遺留系統,我認爲這是我之前的問題中的加密 - 我只是不知道如何根據字節獲取文本! – james 2012-04-25 22:01:29

+0

@james從byte []獲得一個字符串,你需要使用編碼,例如:'string data = new UTF8Encoding(false)。GetString(bytes);' – oleksii 2012-04-25 22:09:34

+0

我試過,但它只是寫出一堆廢話 – james 2012-04-25 22:14:21

1

請看教程這裏: http://www.obviex.com/samples/hash.aspx

從教程: 「這些代碼示例演示瞭如何散列數據和驗證哈希它支持多種哈希算法爲了幫助降低字典攻擊的風險,代碼在生成哈希值之前將原始純文本中的隨機字節(所謂的鹽)加入前綴並將其附加到生成的密文(哈希驗證所需的原始鹽值)。由此產生的ciphertex t是base64編碼的。重要提示:數據哈希不能被解壓縮回到純文本文件中「

+0

非常有幫助的鏈接,謝謝! – ThunD3eR 2017-10-12 11:52:17