HASHBYTES возвращает другой результат, когда функция master.sys.fn_varbintohexstr используется над предварительно определенной переменной - PullRequest
0 голосов
/ 23 января 2019

Для своей страницы входа я планировал использовать master.sys.fn_varbintohexstr для сохранения паролей и сравнения.Но я заметил интересную проблему несоответствия, и это подтолкнуло меня к использованию CONVERT для функции varchar.Пожалуйста, смотрите запрос ниже.

--NOT MATCHING
DECLARE @Salt varchar(max);
SET @Salt = master.sys.fn_varbintohexstr(HASHBYTES('MD5', 'eray@yahoo.com'));

Select [Password] = HASHBYTES('SHA2_256', master.sys.fn_varbintohexstr(HASHBYTES('MD5', 'eray@yahoo.com'))  + 'mypassword#2')
Select [Password] = HASHBYTES('SHA2_256', @Salt  + 'mypassword#2')

Набор результатов, возвращаемый выше: ::

0x0A514606045942EDD38C5C8B84EE3353D82834125094CDE2C7D116931B22CABD
0xE94F936A8502CCA5CF8885738C5ECF8BBF7CB128F3525AAB172B1C03E634BD32

Как видно, они не одинаковы, но я ожидал, что они будут точно такими же,В чем причина этого?Почему это происходит и как это решить?Я сейчас использую, как показано ниже, для решения этой проблемы, но мне интересно, как я могу правильно использовать функцию master.sys.fn_varbintohexstr?Любой совет будет оценен!Спасибо!

--MATCHING (both select here returns same)
DECLARE @Salt varchar(max);
SET @Salt = CONVERT(VARCHAR(34), HASHBYTES('MD5', 'eray@yahoo.com'), 1);

Select [Password] = HASHBYTES('SHA2_256', CONVERT(VARCHAR(34), HASHBYTES('MD5', 'eray@yahoo.com'), 1)  + 'mypassword#2')
Select [Password] = HASHBYTES('SHA2_256', @Salt  + 'mypassword#2')

1 Ответ

0 голосов
/ 23 января 2019

Не удалось выяснить причину за 1 час, но нашел ее через 5 минут после публикации этого вопроса здесь.Это умственная сила SO:)

В любом случае, все, что мне нужно, это объявить @Salt как nvarchar в начале вместо varchar, как показано ниже.

DECLARE @Salt nvarchar(max);
SET @Salt = master.sys.fn_varbintohexstr(HASHBYTES('MD5', 'eray@yahoo.com'));

Select [Password] = HASHBYTES('SHA2_256', master.sys.fn_varbintohexstr(HASHBYTES('MD5', 'eray@yahoo.com'))  + 'mypassword#2')
Select [Password] = HASHBYTES('SHA2_256', @Salt  + 'mypassword#2')
...