2011-07-05 1 views
2

J'essaie de faire une requête sur une table de nom d'utilisateur où le nom d'utilisateur et le mot de passe correspondent. La table est une table préexistante (créée lors de l'installation du logiciel de l'entreprise) et je n'ai pas la possibilité de modifier les types ou méthodes de chiffrement. Une requête avec une chaîne en tant que mot de passe fonctionne parfaitement mais lorsque j'essaie d'interroger en utilisant un entier, la requête renvoie null.Comment utiliser la valeur entière avec la requête SQL Server utilisant HashBytes

"SELECT * 
FROM ITF_USER 
WHERE ITF_LOGIN = '$lcUserName' 
AND ITF_PASS = HashBytes('SHA1', '$lcPassword')"; 

si le mot de passe est quelque chose comme 'helloworld' alors la requête fonctionne très bien, mais '1121321' ne retourne rien. Aucune suggestion?

MISE À JOUR Si je compare la table stockée mot de passe avec le SHA1 de php (lcPassword $) résultats que je vois une légère différence qui est à l'origine des résultats de la requête null:

table -> 0x3FEEAC0B3A75CF1C12A8420CDE593FA275CCE584 
sha1()-> 8feeac0b3a75cf1c12a8420cde598fa275cce584 

il y a deux 8 est dans la SHA1() les résultats qui devraient être 3 de

+0

Pour SQL, il importe peu si vous passez ' « ou 'hello'' » 123'', il est toujours une chaîne. Le problème est peut-être dans d'autres codes; vérifiez le code qui définit ou met à jour le mot de passe. – Andomar

Répondre

1

J'ai essayé ceci:

declare @vc varchar(255), @nvc nvarchar(255) 
set @vc = '1111' 
set @nvc = '1111' 
select hashbytes('sha1', @vc) 
select hashbytes('sha1', @nvc) 

Il est revenu différent valeurs:

varchar = 0x011C945F30CE2CBAFC452F39840F025693339C42 
nvarchar = 0x40C7BD210D05DBEA19402B952DD416E487450955 

Il semble que le type de données des seconds paramètres fait une différence lors de l'appel HashBytes(). Peut-être un varchar est passé lorsque vous utilisez une chaîne et un int est converti en nvarchar (ou vice-versa).

Il pourrait travailler pour forcer tout à un type: HashBytes('SHA1', cast('$lcPassword' as varchar(255))

Questions connexes