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:
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.