Bonsoir à tous,

je suis sur une méthode qui récupère des infos une fois que les identifiants de connexion sont corrects.

Je rencontre un problème de comparaison (à mon avis) entre le cryptage fait par c# lors de la récupération des infos et le cryptage fait par SQL lors de la création des identifiants de connexion

voici mon code :

SQL

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE FUNCTION CryptagePasse (@mdp typeSmallString)
RETURNS hasString
AS
	BEGIN
		declare @hash nvarchar(4000);
		declare @HashThis nvarchar(4000);
		SELECT @HashThis = CONVERT(nvarchar(4000),@mdp);
		SELECT @hash = HASHBYTES('SHA1', @HashThis);
 
		RETURN @hash;
	END
GO
C#

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
        public Carnet ConnexionCarnet(string login, string mdp)
        {
            byte[] hashMdp = System.Text.Encoding.ASCII.GetBytes(mdp);
            SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
            string hash = BitConverter.ToString(sha.ComputeHash(hashMdp)).Replace("-", ""); 
            IQueryable<Carnet> c = from x in DbCarnet.Carnets
                       where ((x.lLogin == login)&&(x.lMdp== hash))
                       select x;
            if (c != null)
                return c.ToList()[0];
            else
                return null;
        }
je pense que c ne sera jamais null dans ce cas la mais la n'est pas le problème.

J'ai fait un test en supprimant la partie du code qui concerne le mdp :

et à ce moment la, ça fonctionne.

malgré que ce soit la même méthode de cryptage (SHA1), il y a un problème de comparaison que je n' arrive pas à résoudre ...

Si quelqu un peut me mettre sur la voie je suis preneur

merci d'avance