我才知道密碼的存儲哈希值是從Preferred Method of Storing Passwords In Database一個安全的一個...
如何鹽和使用C#哈希密碼值?
如何比較存儲在數據庫中的值和用戶給出的值?
我才知道密碼的存儲哈希值是從Preferred Method of Storing Passwords In Database一個安全的一個...
如何鹽和使用C#哈希密碼值?
如何比較存儲在數據庫中的值和用戶給出的值?
最流行的方式做到這一點。有關如何使用MD5算法對字符串進行散列的優秀blog post here,但System.Cryptography
名稱空間中還有許多其他示例。使用指定的算法
至於#2,一般的一步一步的指導,如何做到這一點的工作將是以下幾點:
在登記並將其存儲在數據庫中
在登錄/用戶&口令檢查:
這一切都比較囉嗦,但它是非常安全的。
還有另一個非常深入的哈希指南和醃製here。
附加信息:有幾個版本的登錄和註冊過程http://stackoverflow.com/questions/1471654/reversing-an-md5-hash/1471668#1471668 – 2010-01-05 09:36:59
鹽是一個額外的輸入到散列過程正常,但在其他方面良好的,明確的解釋:在以下SO問題概述。 +1 – 2010-01-05 10:00:48
請幫我在這個問題http://stackoverflow.com/questions/2863034/sql-serverwhat-data-type-to-use-for-password-salt-and-hash-values-and-what-楞 – 2010-05-19 06:16:06
的哈希,你有幾個System.Security.Cryptography支持的算法,爲你的用例,你可能想選擇一個SHA基於散列或類似的東西。
關於比較:您不會比較DB值和用戶給您的值。您首先使用用於將密碼存儲在數據庫中的相同加密/散列函數,這次是用戶輸入。如果結果等於數據庫中的散列,則密碼(可能)是正確的。
其意圖是沒有人可以訪問數據庫可以以明文形式檢索密碼,甚至連程序都不需要知道它(只有接受用戶輸入的部分纔會有短時間) 。
鏈接(甚至重複):
嚴格地說,你應該salt the password再散列它,以避免字典攻擊。您可以使用System.Cryptography
名稱空間中的HashAlgorithm
抽象類的任何實現來計算散列 - 當前最佳選擇可能是SHA-2 algorithms之一。
您存儲散列而不是密碼,並比較散列值以驗證用戶。
@大衛任何例子 – 2010-01-05 09:32:05
像其他人所說的,有很多選擇。
下面是一些示例代碼Microsoft(使用而不是SHA MD5),這可能有助於讓你得到的是使用散列算法開始
using System;
using System.Security.Cryptography;
using System.Text;
string sSourceData;
byte[] tmpSource;
byte[] tmpHash;
sSourceData = "MySourceData";
//Create a byte array from source data.
tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);
//Compute hash based on source data.
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);
簡單的哈希:
public string GetSHA256Hash(string s)
{
if (string.IsNullOrEmpty(s))
{
throw new ArgumentException("An empty string value cannot be hashed.");
}
Byte[] data = System.Text.Encoding.UTF8.GetBytes(s);
Byte[] hash = new SHA256CryptoServiceProvider().ComputeHash(data);
return Convert.ToBase64String(hash);
}
這裏是這一個lib:http://encrypto.codeplex.com/ – Omu 2010-09-14 08:37:48