哈希安全的回答,您可以使用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