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 convertir 0x68E109F0F40CA72A15E05CC22786F8E6
en un VarChar j'obtiens à la há ðô§*à\Â'†øæ
place de 68E109F0F40CA72A15E05CC22786F8E6
.
Existe-t-il une solution basée sur SQL?
sql
sql-server
GateKiller
la source
la source
la source
Utilisez à la
master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)
place demaster.dbo.fn_varbintohexstr
puissubstringing
le résultat.En fait
fn_varbintohexstr
appelle enfn_varbintohexsubstring
interne. Le premier argument de luifn_varbintohexsubstring
dit d'ajouter0xF
comme préfixe ou non.fn_varbintohexstr
appelsfn_varbintohexsubstring
avec1
comme premier argument en interne.Parce que vous n'en avez pas besoin
0xF
, appelezfn_varbintohexsubstring
directement.la source
Contrairement à ce que dit David Knight , ces deux alternatives renvoient la même réponse dans MS SQL 2008:
Il semble donc que le premier soit un meilleur choix, à partir de la version 2008.
la source
(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:
exactement la même chose que ce que nous obtenons en C # après la conversion d'octets en chaîne
la source
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:
la source
Changer le type de données en varbinary semble fonctionner le mieux pour moi.
la source