web-dev-qa-db-fra.com

Générer une chaîne de hachage MD5 avec T-SQL

Existe-t-il un moyen de générer une chaîne de hachage MD5 de type varchar (32) sans utiliser fn_varbintohexstr

SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', '[email protected]')), 3, 32)

Donc, il pourrait être utilisé dans une vue avec SCHEMABINDING

90
Grief Coder
CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2)
177
Konstantin Tarkus

Utilisez HashBytes

SELECT HashBytes('MD5', '[email protected]')

Cela vous donnera 0xF53BD08920E5D25809DF2563EF9C52B6

-

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', '[email protected]'),2)

Cela vous donnera F53BD08920E5D25809DF2563EF9C52B6

60
SQLMenace

Solution:

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32)
20
Dellas

Aucune des autres réponses n'a fonctionné pour moi. Notez que SQL Server donnera des résultats différents si vous transmettez une chaîne codée en dur à l'alimenter à partir d'une colonne de votre jeu de résultats. Vous trouverez ci-dessous la magie qui a fonctionné pour que je donne une correspondance parfaite entre SQL Server et MySql

select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
14
jmacinnes

Pour les données jusqu'à 8000 caractères, utilisez:

CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2)

Demo

Pour les données binaires (sans la limite de 8 000 octets), utilisez:

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

Demo

13
slartidan

essaye ça:

select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  '[email protected]' )),3,32) 
4
dellasavia
declare @hash nvarchar(50)
--declare @hash varchar(50)

set @hash = '1111111-2;20190110143334;001'  -- result a5cd84bfc56e245bbf81210f05b7f65f
declare @value varbinary(max);
set @value = convert(varbinary(max),@hash);


select  
 SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '1111111-2;20190110143334;001')),3,32) as 'OK'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @hash)),3,32) as 'ERROR_01'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',convert(varbinary(max),@hash))),3,32) as 'ERROR_02'
,SUBSTRING(sys.fn_sqlvarbasetostr(sys.fn_repl_hash_binary(convert(varbinary(max),@hash))),3,32)
,SUBSTRING(sys.fn_sqlvarbasetostr(master.sys.fn_repl_hash_binary(@value)),3,32)
0
fernando yevenes