sql - Convertir HashBytes en VarChar

Translate

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

SELECT HashBytes('MD5', 'HelloWorld')

Cependant, cela renvoie un VarBinary au lieu d'une valeur VarChar. Si j'essaye de convertir0x68E109F0F40CA72A15E05CC22786F8E6dans un VarChar je reçoishá ðô§*à\Â'†øæau lieu de68E109F0F40CA72A15E05CC22786F8E6.

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

Oui

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

J'ai trouvé la solution ailleurs où:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
La source
Translate
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
La source
Translate

Utilisationmaster.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)au lieu demaster.dbo.fn_varbintohexstret alorssubstringingle résultat.

En réalitéfn_varbintohexstrappelsfn_varbintohexsubstringintérieurement. Le premier argument defn_varbintohexsubstringlui dit d'ajouter0xFcomme préfixe ou non.fn_varbintohexstrappelsfn_varbintohexsubstringavec1comme premier argument en interne.

Parce que tu n'as pas besoin0xF, appelfn_varbintohexsubstringdirectement.

La source
Translate

Contrairement à quoiDavid Knightdit, ces deux alternatives renvoient la même réponse dans MS SQL 2008:

SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'Hello World'),2)
SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('MD5', 'Hello World'), 1, 0))

Il semble donc que le premier soit un meilleur choix, à partir de la version 2008.

La source
Translate
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

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

convertissez-le en inférieur et supprimez 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 la conversion d'octets en chaîne

La source
Translate

Avec l'expérience personnelle de l'utilisation du code suivant dans une procédure stockée qui a haché une variable SP, je peux confirmer, bien que non documentée, cette combinaison fonctionne à 100% selon mon exemple:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
La source
Translate

Changer le type de données en varbinary semble fonctionner le mieux pour moi.

La source