122 votes

Conversion de HashBytes en VarChar

Je veux obtenir le hachage MD5 d'une valeur de chaîne de caractères dans SQL Server 2005. Je le fais avec la commande suivante :

SELECT HashBytes('MD5', 'HelloWorld')

Cependant, cela renvoie une valeur VarBinary au lieu d'une valeur VarChar. Si je tente de convertir 0x68E109F0F40CA72A15E05CC22786F8E6 dans un VarChar, j'obtiens há ðô§*à\Â'†øæ au lieu de 68E109F0F40CA72A15E05CC22786F8E6 .

Existe-t-il une solution basée sur SQL ?

Oui

143voto

GateKiller Points 19113

J'ai trouvé la solution ailleurs :

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)

78voto

Rapscallion Points 401
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)

30voto

Xaqron Points 6036

Utilisez master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0) au lieu de master.dbo.fn_varbintohexstr et ensuite substringing le résultat.

En effet fn_varbintohexstr appelle fn_varbintohexsubstring en interne. Le premier argument de fn_varbintohexsubstring lui dit d'ajouter 0xF comme préfixe ou non. fn_varbintohexstr appelle fn_varbintohexsubstring avec 1 comme premier argument interne.

Parce que vous n'avez pas besoin 0xF appel fn_varbintohexsubstring directement.

12voto

Ramans Points 41
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(1 pour convertir l'hexadécimal en chaîne)

convertir en inférieur et enlever 0x du début de la chaîne par sous-chaîne :

substring(lower(convert(varchar(34), HASHBYTES('MD5','Hello World'),1)),3,32)

exactement la même chose que ce que nous obtenons en C# après avoir converti les octets en chaîne de caractères.

1voto

Michael Stum Points 72046

Vous pouvez essayer de vous débarrasser du 0x en utilisant SUBSTRING ou similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X