PasswordSalt 与 SimpleMembershipProvider 的作用

Role of PasswordSalt witn SimpleMembershipProvider

我分析了 SimpleMembershipProviderCreateAccount 方法,发现 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);

虽然保存盐很常见,但没有必要。这主要取决于盐是如何产生的。

如果 salt 仅依赖于数据库中已经存在的信息,例如 UserId,它可以使用该信息重新创建 salt。

另一种选择是在不使用明确分隔符的情况下将盐与密码哈希连接起来。所以可能密码哈希的前 8 个字节实际上是盐。

那么有可能没有使用盐。所以没必要填。 Which actually seems to be the case here.