Fonction HashBytes dans SQL Server (mauvais résultat MD5)

J'ai fait face à un problème étrange avec une fonction SQL Server HashBytes .

J'ai un Password de Password colonne dans ma table d' Users ( nvarchar(32), not null ).

Le mot de passe de l'user est 123456 qui est e10adc3949ba59abbe56e057f20f883e dans MD5 et cette valeur est stockée dans la colonne.

J'essaie d'get la fonction de hachage MD5 de e10adc3949ba59abbe56e057f20f883e qui est en fait 14e1b600b1fd579f47433b88e8d85291 (vous pouvez le vérifier ici ), mais dans ma requête SQL Server, j'obtiens un tout autre résultat:

 SELECT TOP 1 Password, lower(convert(nvarchar(32), HashBytes('MD5', '123456'), 2)) AS md5pass1, lower(convert(nvarchar(32), HashBytes('MD5', 'e10adc3949ba59abbe56e057f20f883e'), 2)) AS md5pass2, lower(convert(nvarchar(32), HashBytes('MD5', Password), 2)) AS md5pass3 FROM Users 

Le résultat est:

entrez la description de l'image ici

et je m'attends à get '14e1b600b1fd579f47433b88e8d85291' comme résultat …

J'apprécie que tu m'aides!

Vous ne pouvez pas hacher le text, vous pouvez seulement hacher les octets. HashBytes convertit d'abord la string d'input en octets. La conversion dépend de si le type de données est un type Unicode. Je suppose que le Password est nvarchar et je vois que vos littéraux sont varchar .

Décidez lequel vous voulez et utilisez-le régulièrement.

La cause première est que nvarchar que vous avez utilisé est unicode. Obtenez le résultat correct une fois qu'il est converti en varchar non-unicode. Puisque c'est un mot de passe, pourquoi ne pas utiliser varchar directement.