WebMatrix WebSecurity PasswordSalt

27
我正在使用WebMatrix,并基于“StarterSite”构建网站。在这个起始站点中,您会得到一个漂亮的基本布局——包括注册、登录、忘记密码等页面...

我注意到在数据库中,“webpages_Membership”表具有名为“PasswordSalt”的列。创建了一些新用户账户后,该列始终为空。因此,我假设没有使用密码盐(甚至没有默认密码盐)。

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

如何使用WebSecurity助手设置密码盐?

2个回答

36
上面的答案给人的印象是在使用WebSecurity SimpleMembershipProvider时没有应用盐值。这并不正确。实际上,数据库的盐字段未被使用,但这并不表示在哈希密码时没有生成盐值
WebSecuritySimpleMembershipProvider中使用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);

6
这里有一篇更详细的文章:http://www.mikesdotnetting.com/Article/200/The-SimpleMembershipProvider-Secure-Passwords-And-The-Crypto-Helper - Bryan
正如 Mike Brind 所提到的,Simple membershipProvider 实际上使用了盐值哈希。但是盐值是基于哈希值的。密码可以通过 System.Web.Helpers.Crypto.HashPassword(password) 进行哈希处理,并且可以通过 System.Web.Helpers.Crypto.VerifyHashedPassword(hashed, password) 与明文密码字符串进行比较。 - Aryan Firouzian

4

在WebMatrix/ASP.NET Web Pages的RTM版本中,盐特征/列未被使用。

如果您打开Web Pages源代码,您会看到数据库类中散布着引用,例如:

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 代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接