27

我正在使用 WebMatrix 并建立了一个基于“StarterSite”的网站。在这个入门站点中,您可以获得一个不错的基本布局 - 包括注册、登录、忘记密码页面等......

我注意到在数据库中,“webpages_Membership”表有一个名为“PasswordSalt”的列。创建几个新用户帐户后,此列始终保持空白。所以我假设没有使用密码盐(甚至不是默认的)。

显然这不是最佳实践,但是我似乎找不到任何文档告诉我如何设置或管理密码盐。

如何使用 WebSecurity Helper 设置密码 salt?

4

2 回答 2

36

上面的答案给人的印象是使用时没有加盐WebSecurity SimpleMembershipProvider

那不是真的。实际上没有使用数据库盐字段,但这并不表示在对密码进行哈希处理时没有生成盐。

WebSecuritysSimpleMembershipProvider中使用了 PBKDF2 算法,随机盐是由 生成的,StaticRandomNumberGenerator并与哈希一起存储在密码字段中:

byte[] outputBytes = new byte[1 + SALT_SIZE + PBKDF2_SUBKEY_LENGTH];
Buffer.BlockCopy(salt, 0, outputBytes, 1, SALT_SIZE); 
Buffer.BlockCopy(subkey, 0, outputBytes, 1 + SALT_SIZE, PBKDF2_SUBKEY_LENGTH);
return Convert.ToBase64String(outputBytes);
于 2012-05-02T15:25:51.563 回答
4

从 WebMatrix/ASP.NET 网页的 RTM 版本开始,salt 功能/列未使用。

如果您打开网页源代码,您会看到 db 类中到处都是引用,例如

INSERT INTO [" + MembershipTableName + "] (UserId, [Password], PasswordSalt

...

VALUES (uid, hashedPassword,String.Empty /* salt column is unused */

为强调而缩短

肯定有方法可以覆盖和实现这种行为,首先是:

  • 覆盖 System.WebData.SimpleMembershipProvider.CreateAccount()

或者

  • 使用 System.WebData.SimpleMembershipProvider.CreateAccountWithPasswordSalt() 扩展

除非您要求,否则不会在此处详细介绍,因为您对 WebMatrix 和模板的使用表明您可能不想为这个项目重写大量自己的 C#/ASP 代码。

于 2011-02-25T14:29:10.997 回答