哈希安全的回答,您可以使用UserManager.PasswordHasher
:
var manager = // get instance of UserManager
var hashedAnswer = manager.PasswordHasher.HashPassword("Very secret Answer to my secrect question");
// ... here store you hashed answer in database
当用户返回并尝试重置您的密码得到答案的存储的哈希并将其与用户新提供的答案:
PasswordVerificationResult isValid = manager.PasswordHasher.VerifyHashedPassword(hashedAnswer, "Hello, this is the wrong answer");
if(PasswordVerificationResult.Success)
{
// reset password, answer is correct
}
就像这样。
但是,我不是秘密问题/答案的粉丝。从安全角度来看,它们本质上是有缺陷的。你的答案变成另一个密码,这个密码比你的普通密码更易猜出,因为这个问题提供了一个提示。我建议通过Troy Hunt about password resetting的优秀文章阅读 - 它涉及秘密问题/答案的主题。
你问你是否可以使用SecurityStamp作为盐来散列SecurityAnswer?我不会推荐这个,因为SecurityStamp可以在任何时候改变,当它发生改变时,你基本上失去了你的食盐,并且在将来验证SecurityAnswer的能力都会消失。 – trnelson 2015-03-18 11:17:47