1
我在寫一個自定義的MembershipProvider。當然,我想加密用戶創建的密碼。我認爲.NET有一些加密密碼的東西。它是什麼以及如何使用它?輸出的字符串大小是多少?我之前已經寫過會員供應商,但它只是驗證用戶是否有效。這是我第一次需要添加用戶註冊和登錄。如何在MembershipProvider中使用內置密碼加密?
我確定我沒有使用正確的搜索字詞,但Google並未向我顯示任何有價值的東西。
我在寫一個自定義的MembershipProvider。當然,我想加密用戶創建的密碼。我認爲.NET有一些加密密碼的東西。它是什麼以及如何使用它?輸出的字符串大小是多少?我之前已經寫過會員供應商,但它只是驗證用戶是否有效。這是我第一次需要添加用戶註冊和登錄。如何在MembershipProvider中使用內置密碼加密?
我確定我沒有使用正確的搜索字詞,但Google並未向我顯示任何有價值的東西。
首先你不應該加密密碼。你應該散列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這一點。它有一個使用散列和加密密碼的例子。
我想在這種情況下,我的意思是我不想以明文形式存儲它們。 – 2012-03-10 18:55:05
@MikeWills - 我不確定我是否明白你的意思,但無論是哪種情況,無論是加密還是散列,你都不會以明文形式存儲它們。 – TheBoyan 2012-03-10 18:59:03
清除文本,表示我的密碼是否爲pass1234,我在密碼字段中看到pass1234。哈希我會看起來像隨機亂碼。 – 2012-03-10 19:02:24