SQL обновляет пароли HashBytes SHA2_512 до HashBytes SHA2_512 SALT

В настоящее время я обновляю веб-сайт для аутентификации с помощью комбинированного пароля HashBytes SHA2_512 SALT.

Моя проблема в том, что как только я это сделаю, все мои текущие пользователи больше не смогут войти в систему со своим существующим паролем HashBytes SHA2_512.

Есть ли способ расшифровать (обновить) через SQL текущий пароль HashBytes SHA2_512 с помощью комбинированного пароля HashBytes SHA2_512 SALT.

Вот пример моего выбора для проверки.

//current which will no longer work once i have updated the page 

SELECT intcustomerid, strUserName, strUserPassword
FROM dbo.tblLoginControl WHERE strUserName = 'Dave' AND strUserPassword =HashBytes('SHA2_512', 'Rice205H*!')


//new one once I have update the page

SELECT [AccountName], [AccountPwd]
FROM [dbo].[SecurityAccounts] WHERE [AccountName]= 'Dave' AND [AccountPwd] =HashBytes('SHA2_512',  [Salt] +  'Rice205H*!')

Поэтому мне нужно взять существующий пароль и обновить его с помощью соли.

Я не уверен, что это можно сделать, и единственным обходным путем было бы отправить электронное письмо моим пользователям и попросить их запросить новый пароль с сайта?

Спасибо.


person raymantle    schedule 21.05.2016    source источник
comment
@artjom Спасибо. Это может быть лучшим маршрутом и менее болезненным для моих пользователей. Я посмотрю и отвечу в ближайшее время.   -  person raymantle    schedule 21.05.2016
comment
Это отличный пример того, почему рекомендуется ставить перед хешем версию.   -  person zaph    schedule 21.05.2016
comment
@zaph Можете ли вы объяснить, что вы имеете в виду хэши префикса с версией   -  person raymantle    schedule 21.05.2016
comment
Если вы добавите индикатор версии, то тогда, когда (а не если) необходимо изменить схему, это возможно без необходимости аннулирования текущих реализаций. Это позволяет ориентироваться на будущее и постепенно переходить на новую версию. Обратите внимание, что в некоторых схемах хэширования паролей используется префикс $x$, где x указывает версию.   -  person zaph    schedule 22.05.2016


Ответы (1)


Невозможно «расшифровать» хешированный пароль. Почему бы вам не добавить столбец (бит), где вы храните, зашифрован ли пароль солью или нет.

Тогда это просто еще одно условие, например:

AND ((isSalted = false 
      AND strUserPassword =HashBytes('SHA2_512', 'Rice205H*!'))
    or [AccountPwd] =HashBytes('SHA2_512',  [Salt] +  'Rice205H*!'))
person dnoeth    schedule 21.05.2016