Для своей страницы входа я планировал использовать 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')