Convertir HashBytes à VarChar

voix
102

Je veux obtenir le hash 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 une VarBinary au lieu d'une valeur VarChar. Si je tente de convertir 0x68E109F0F40CA72A15E05CC22786F8E6en un VarChar je reçois au há ðô§*à\Â'†øælieu de 68E109F0F40CA72A15E05CC22786F8E6.

Y at-il une solution basée sur SQL?

Oui

Créé 05/08/2008 à 12:49
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
134

J'ai trouvé la solution autre où:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Créé 05/08/2008 à 15:26
source utilisateur

voix
59
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Créé 03/01/2011 à 15:26
source utilisateur

voix
29

Utilisez au master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)lieu de master.dbo.fn_varbintohexstrpuis substringingle résultat.

En fait les fn_varbintohexstrappels en fn_varbintohexsubstringinterne. Le premier argument de fn_varbintohexsubstringdit à ajouter 0xFcomme préfixe ou non. fn_varbintohexstrappelle fn_varbintohexsubstringavec 1comme premier argument internaly.

Parce que vous n'avez pas besoin 0xF, appelez fn_varbintohexsubstringdirectement.

Créé 17/03/2011 à 17:00
source utilisateur

voix
15

Contrairement à ce que David Knight dit, 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 ressemble le premier est un meilleur choix, à partir de la version 2008.

Créé 28/08/2014 à 06:35
source utilisateur

voix
8
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

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

convertir en bas et retirer 0x dès le 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

Créé 07/09/2011 à 08:43
source utilisateur

voix
1

Avec l'expérience personnelle d'utiliser le code suivant dans une procédure stockée qui HASHED une variable SP je peux confirmer, bien que sans papier, cette combinaison fonctionne à 100% selon mon exemple:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Créé 24/02/2015 à 22:54
source utilisateur

voix
-3

Modification du type de données à varbinary semble fonctionner le mieux pour moi.

Créé 17/02/2010 à 22:31
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more