我正在使用WebMatrix,并基于“StarterSite”构建网站。在这个起始站点中,您会得到一个漂亮的基本布局——包括注册、登录、忘记密码等页面...
我注意到在数据库中,“webpages_Membership”表具有名为“PasswordSalt”的列。创建了一些新用户账户后,该列始终为空。因此,我假设没有使用密码盐(甚至没有默认密码盐)。
显然,这不是最佳实践,但我似乎找不到任何文档告诉我如何设置或管理密码盐。
如何使用WebSecurity助手设置密码盐?
我注意到在数据库中,“webpages_Membership”表具有名为“PasswordSalt”的列。创建了一些新用户账户后,该列始终为空。因此,我假设没有使用密码盐(甚至没有默认密码盐)。
显然,这不是最佳实践,但我似乎找不到任何文档告诉我如何设置或管理密码盐。
如何使用WebSecurity助手设置密码盐?
WebSecurity
SimpleMembershipProvider
时没有应用盐值。这并不正确。实际上,数据库的盐字段未被使用,但这并不表示在哈希密码时没有生成盐值。WebSecurity
的SimpleMembershipProvider
中使用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);
在WebMatrix/ASP.NET Web Pages的RTM版本中,盐特征/列未被使用。
如果您打开Web Pages源代码,您会看到数据库类中散布着引用,例如:
INSERT INTO [" + MembershipTableName + "] (UserId, [Password], PasswordSalt
...
VALUES (uid, hashedPassword,String.Empty /* salt column is unused */
强调缩短
肯定有方法可以覆盖和实现此行为,第一种方法是:
或者
不过,除非您要求,否则我不会详细介绍这些方法,因为您使用的 WebMatrix 和模板表明您可能不想为此项目重写大量自己的 C#/ASP 代码。