如何在MembershipProvider中使用内置密码加密?

时间:2012-03-09 17:09:48

标签: asp.net-membership custom-membershipprovider

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

我确信我没有使用正确的搜索字词,但Google没有向我展示任何有价值的内容。

1 个答案:

答案 0 :(得分: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。它有一个使用散列和加密密码的例子。