Почему SQL-запрос с SHA2_256 возвращает NULL в предложении WHERE - PullRequest
0 голосов
/ 06 июля 2018

Мне нужна помощь в этом, любые комментарии будут высоко оценены.

У меня есть таблица Пользователи с полем Пароль пользователя с типом данных varchar (60)

Вставляю на стол пользователей из этого выбора

SELECT HASHBYTES('SHA2_256','test') 
it insert its value (0x9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08)

пока все хорошо

проблема возникает, когда я хочу получить пользователя из таблицы, и он не соответствует значению поля UserPassword.

Select u.UserName
from Users u
where UserPassword  = HASHBYTES('SHA2_256','test')

запрос выполняется с 0 результатами. почему ???

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

заранее спасибо

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Введите тип данных пароля пользователя до VARCHAR (1000) или чего-то еще. Хэш-карта возвращает 65 символов, поэтому она усекается до 60.

Редактировать: Это исправит это, но сделайте то, что сказал Дэн вместо этого. Это более надежно.

0 голосов
/ 06 июля 2018

поле UserPassword имеет тот же тип данных? или сделать любое другое приведение к значению для соответствия?

Это зависит от используемого вами алгоритма хеширования. Хеширование всегда дает результат одинаковой длины, независимо от ввода. Типично представлять двоичный результат хеширования в тексте как последовательность шестнадцатеричных цифр. Или вы можете использовать функцию UNHEX (), чтобы уменьшить строку шестнадцатеричных цифр вдвое.

SHA-256 генерирует 256-битное хеш-значение. Вы можете использовать CHAR (64) или БИНАРНЫЙ (32)

NIST рекомендует использовать SHA-256 или выше для паролей. Меньшие алгоритмы хеширования имеют свое применение, но их можно взломать.

Вы должны защитить ваши пароли перед применением функции хеширования. Таким образом, пароль не влияет на длину результата хеширования.

Редактировать: Отметьте это Поле хешированного пароля и длина для получения дополнительной информации

0 голосов
/ 06 июля 2018

У меня есть таблица Users с полем UserPassword с типом данных varchar (60)

HASHBYTES возвращает varbinary (8000). Используйте это для типа данных вашей базы данных, чтобы убедиться, что значение хранится и сравнивается должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...