密码盐与SimpleMembershipProvider的作用

时间:2015-03-24 07:45:24

标签: c# salt simplemembership

我从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);

1 个答案:

答案 0 :(得分:0)

虽然保存盐很常见,但没有必要。它主要取决于盐的产生方式。

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

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

然后有可能不使用盐。所以没有必要填写它。 Which actually seems to be the case here.