我正在编写自定义MembershipProvider。当然我想加密用户创建的密码。我认为.NET有一些加密密码的东西。它是什么以及如何使用它?输出的字符串大小是多少?我以前写过会员提供者,但它只是验证用户是否有效。这是我第一次需要添加用户注册和登录。
我确信我没有使用正确的搜索字词,但Google没有向我展示任何有价值的内容。
答案 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。它有一个使用散列和加密密码的例子。