Я унаследовал приложение, которое использует поставщик членства ASP.NET для управления пользователями. В рамках различных исправлений и улучшений я заменяю использование простых текстовых паролей хешированными. На существующей странице сброса пароля пользователь должен снова ввести правильный ответ на свой секретный вопрос, свой текущий пароль, желаемый новый пароль и желаемый новый пароль.
Я столкнулся с проблемой, когда мне кажется, нет простого способа проверить правильность введенного ответа на секретный вопрос. Без этой проверки пользователь может ввести что угодно в это поле, и если он введет правильный текущий пароль, он будет сброшен.
Я не могу вызвать GetPassword (), поскольку этот метод недоступен, если passwordFormat = "Хешированный" в Web.config.
Я попытался вручную расшифровать хешированный ответ на секретный вопрос, как описано здесь но это относится только к зашифрованным значениям, а не к хешированным (я полагаю, логично :))
Я пробовал вручную хешировать введенный пользователем ответ и сравнивать его со значением, хранящимся в базе данных, но две хешированные строки разные. Я использую алгоритм, описанный в третьем сообщении здесь, и он работает при сравнении хешированные пароли, но, к сожалению, не хешированный ответ на секретный вопрос.
Есть ли у кого-нибудь еще предложения? Это кажется довольно фундаментальным, поэтому у меня такое чувство, что я упускаю что-то очевидное.