1

我正在编写一个自定义 MembershipProvider。当然,我想加密用户创建的密码。我认为.NET 有加密密码的东西。它是什么以及如何使用它?该输出的字符串大小是多少?我之前写过会员提供者,但只是为了验证用户是否有效。这是我第一次需要添加用户注册和登录。

我确信我没有使用正确的搜索词,但谷歌并没有向我展示任何对我有价值的东西。

4

1 回答 1

1

首先,您不应该加密密码。你应该对它们进行哈希处理(关于这个问题一直存在着争论)。

对于散列密码,您可以使用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>

查看我的博客文章。它有一个使用散列和加密密码的示例。

于 2012-03-09T23:51:26.703 回答