Генерация хеш-строки MD5 с T-SQL - PullRequest
90 голосов
/ 20 августа 2010

Есть ли способ сгенерировать хеш-строку MD5 типа varchar (32) без использования fn_varbintohexstr

SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)

, чтобы ее можно было использовать внутри представления с помощью SCHEMABINDING

Ответы [ 7 ]

176 голосов
/ 20 августа 2010
CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
60 голосов
/ 20 августа 2010

Использование HashBytes

SELECT HashBytes('MD5', 'email@dot.com')

Это даст вам 0xF53BD08920E5D25809DF2563EF9C52B6

-

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'email@dot.com'),2)

Это даст вам F53BD08920E5D259809F5909109

20 голосов
/ 12 октября 2012

Решение:

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32)
14 голосов
/ 15 мая 2014

Ни один из других ответов не работал для меня. Обратите внимание, что SQL Server даст разные результаты, если вы передадите жестко запрограммированную строку по сравнению с передачей из столбца в наборе результатов. Ниже приведена магия, которая сработала для меня, чтобы дать идеальное соответствие между SQL Server и MySql

select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
13 голосов
/ 05 августа 2016

Для данных длиной до 8000 символов используйте:

CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)

Демо

Для двоичных данных (без ограничения 8000 байт) используйте:

CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@binary_data), 2)

Демо

4 голосов
/ 06 марта 2015

попробуйте это:

select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  'email@dot.com' )),3,32) 
0 голосов
/ 20 февраля 2019

объявить @hash nvarchar (50) --declare @hash varchar (50)

set @hash = '1111111-2; 20190110143334; 001' - результат a5cd84bfc56e245bbf81210f05b7f65f объявить @value varbinary (max); set @value = convert (varbinary (max), @ hash);

выберите
SUBSTRING (sys.fn_sqlvarbasetostr (HASHBYTES ('MD5', '1111111-2; 20190110143334; 001')), 3,32) как «ОК» , SUBSTRING (sys.fn_sqlvarbasetostr (HASHBYTES ('MD5', @hash)), 3,32) как 'ERROR_01' , SUBSTRING (sys.fn_sqlvarbasetostr (HASHBYTES ('MD5'), конвертировать (varbinary (max), @ hash))), 3,32) в 'ERROR_02' , SUBSTRING (sys.fn_sqlvarbasetostr (sys.fn_repl_hash_binary (конвертировать (VARBINARY (макс), @ хэш))), 3,32) , SUBSTRING (sys.fn_sqlvarbasetostr (master.sys.fn_repl_hash_binary (@value)), 3,32)

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