2010-01-05 64 views

回答

20

最流行的方式做到這一點。有關如何使用MD5算法對字符串進行散列的優秀blog post here,但System.Cryptography名稱空間中還有許多其他示例。使用指定的算法

  1. 哈希用戶的口令:

    至於#2,一般的一步一步的指導,如何做到這一點的工作將是以下幾點:

    在登記並將其存儲在數據庫中

  2. Salt該散列(可選的,但優選的)

在登錄/用戶&口令檢查:

  1. 查找在數據庫中的用戶名
  2. 如果它存在,檢索哈希密碼
  3. 哈希和鹽的輸入的密碼,並將其與檢索密碼

這一切都比較囉嗦,但它是非常安全的。

還有另一個非常深入的哈希指南醃製here

+0

附加信息:有幾個版本的登錄和註冊過程http://stackoverflow.com/questions/1471654/reversing-an-md5-hash/1471668#1471668 – 2010-01-05 09:36:59

+0

鹽是一個額外的輸入到散列過程正常,但在其他方面良好的,明確的解釋:在以下SO問題概述。 +1 – 2010-01-05 10:00:48

+0

請幫我在這個問題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

0

的哈希,你有幾個System.Security.Cryptography支持的算法,爲你的用例,你可能想選擇一個SHA基於散列或類似的東西。

關於比較:您不會比較DB值和用戶給您的值。您首先使用用於將密碼存儲在數據庫中的相同加密/散列函數,這次是用戶輸入。如果結果等於數據庫中的散列,則密碼(可能)是正確的。

其意圖是沒有人可以訪問數據庫可以以明文形式檢索密碼,甚至連程序都不需要知道它(只有接受用戶輸入的部分纔會有短時間) 。

鏈接(甚至重複):

0

嚴格地說,你應該salt the password再散列它,以避免字典攻擊。您可以使用System.Cryptography名稱空間中的HashAlgorithm抽象類的任何實現來計算散列 - 當前最佳選擇可能是SHA-2 algorithms之一。

您存儲散列而不是密碼,並比較散列值以驗證用戶。

+0

@大衛任何例子 – 2010-01-05 09:32:05

0

像其他人所說的,有很多選擇。

下面是一些示例代碼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); 
5

簡單的哈希:

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); 
     }