我正在编写一个自定义 MembershipProvider。当然,我想加密用户创建的密码。我认为.NET 有加密密码的东西。它是什么以及如何使用它?该输出的字符串大小是多少?我之前写过会员提供者,但只是为了验证用户是否有效。这是我第一次需要添加用户注册和登录。
我确信我没有使用正确的搜索词,但谷歌并没有向我展示任何对我有价值的东西。
我正在编写一个自定义 MembershipProvider。当然,我想加密用户创建的密码。我认为.NET 有加密密码的东西。它是什么以及如何使用它?该输出的字符串大小是多少?我之前写过会员提供者,但只是为了验证用户是否有效。这是我第一次需要添加用户注册和登录。
我确信我没有使用正确的搜索词,但谷歌并没有向我展示任何对我有价值的东西。
首先,您不应该加密密码。你应该对它们进行哈希处理(关于这个问题一直存在着争论)。
对于散列密码,您可以使用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>
查看我的博客文章。它有一个使用散列和加密密码的示例。