2012-03-09 96 views
1

我在寫一個自定義的MembershipProvider。當然,我想加密用戶創建的密碼。我認爲.NET有一些加密密碼的東西。它是什麼以及如何使用它?輸出的字符串大小是多少?我之前已經寫過會員供應商,但它只是驗證用戶是否有效。這是我第一次需要添加用戶註冊和登錄。如何在MembershipProvider中使用內置密碼加密?

我確定我沒有使用正確的搜索字詞,但Google並未向我顯示任何有價值的東西。

回答

1

首先你不應該加密密碼。你應該散列them(這是一個永遠在爭論的問題)。

對於散列密碼,您可以使用HMACSHA1。例如,當您創建的用戶,並且存儲密碼前:

HMACSHA1 hash = new HMACSHA1(); 
hash.Key = youKey; // you could use machine key 
encodedPassword = Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password))); 

,然後存儲在數據庫中的價值。 然後,您可以通過對輸入的密碼進行散列和比較散列值來比較輸入的密碼。

當然,你需要指定密碼在配置文件散列作者:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20"> 
    <providers> 
    <remove name="AspNetSqlProvider" /> 
    <add name="SqlProvider" 
     type="System.Web.Security.SqlMembershipProvider" 
     passwordFormat="Hashed" 
     applicationName="/" /> 
    </providers> 
</membership> 

看看我blog post這一點。它有一個使用散列和加密密碼的例子。

+0

我想在這種情況下,我的意思是我不想以明文形式存儲它們。 – 2012-03-10 18:55:05

+0

@MikeWills - 我不確定我是否明白你的意思,但無論是哪種情況,無論是加密還是散列,你都不會以明文形式存儲它們。 – TheBoyan 2012-03-10 18:59:03

+0

清除文本,表示我的密碼是否爲pass1234,我在密碼字段中看到pass1234。哈希我會看起來像隨機亂碼。 – 2012-03-10 19:02:24