我从CreateAccount
分析了SimpleMembershipProvider
方法,在那里我发现PasswordSalt
没有存储在数据库中,只保存了hashedpassword
。
将PasswordSalt
保存在数据库中是不是没有必要?
int insert = db.Execute(@"INSERT INTO [" + MembershipTableName + "] (UserId, [Password], PasswordSalt, IsConfirmed, ConfirmationToken, CreateDate, PasswordChangedDate, PasswordFailuresSinceLastSuccess)"
+ " VALUES (@0, @1, @2, @3, @4, @5, @5, @6)", uid, hashedPassword, String.Empty /* salt column is unused */, !requireConfirmationToken, dbtoken, DateTime.UtcNow, defaultNumPasswordFailures);
答案 0 :(得分:0)
虽然保存盐很常见,但没有必要。它主要取决于盐的产生方式。
如果salt仅依赖于数据库中已存在的信息,例如UserId,它可以使用该信息重新创建salt。
另一种选择是在不使用清除分隔符的情况下将salt与密码哈希连接起来。所以可能是密码哈希的前8个字节实际上是盐。
然后有可能不使用盐。所以没有必要填写它。 Which actually seems to be the case here.