Bonsoir à tous,

mon problème est le suivant

j'utilise 2 procédures stockées (sql-server)
CreerClient : crypte en sha1 le mot de passe et insère les données dans la table client
RecupererClient : crypte en sha1 le mot de passe et compare avec la bdd pour récuperer l'id du client.

tout marche bien en sql (plusieurs tests)

mais des que je passe par mon appli c# via linq ca ne fonctionne pas. je constate que pour un meme mot de passe, il est crypté différement suivant si je passe par c# ou par sql direct (meme procédure stockée)

j'ai bien verifié tout mon code et les données ne sont pas modifiés entre la saisie et l envoi à sql.

y a t il une astuce pour palier à ce probleme?

voici les codes SQL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
 
CREATE PROCEDURE RecupererIdClient
	@mail lowString,
	@pass lowString,
	@id bInt output
AS
	DECLARE @hash nvarchar(4000);
	DECLARE @HashThis nvarchar(4000);
	SELECT @HashThis = CONVERT(nvarchar(4000),@pass);
	SELECT @hash = HASHBYTES('SHA1', @HashThis);
	BEGIN
		if((@mail is null) or (@pass is null))
		BEGIN
			set @id = -1;
		END
		else
		BEGIN
			print @hash
			if( not exists(	SELECT * FROM clients WHERE email = @mail AND motPasse = @hash))
			BEGIN
				set @id = -2;
			END
			else
			BEGIN
				SELECT @id = idClient
				FROM clients
				WHERE email = @mail AND motPasse = @hash
			END
		END
 
		RETURN; 
	END
GO
 
 
CREATE PROCEDURE CreerClient
	@nom		medString,
	@prenom		medString,
	@numRue		mInt,
	@rue		bigString,
	@cp			lowString,
	@ville		lowString,
	@pays		lowString,
	@email		lowString,
	@motPasse	lowString,
	@message	varchar(100) output,
	@codeRet	bInt output
AS
	declare @hash nvarchar(4000);
	declare @HashThis nvarchar(4000);
	SELECT @HashThis = CONVERT(nvarchar(4000),@motPasse);
	SELECT @hash = HASHBYTES('SHA1', @HashThis);
	declare @bidon char;
 
	--	Test des paramètres
	if(	(@nom is null) or (@prenom is null) or (@numRue is null) or (@rue is null) or (@cp is null)
		or (@ville is null) or (@pays is null) or (@email is null) or (@motPasse is null) )
	BEGIN
		set @codeRet = -1;
		set @message = 'un des paramètres est null';
	END
	else
	BEGIN
		begin try
		begin transaction
			--	Blocage de la table client pour insertion
			SELECT @bidon=''
			FROM clients WITH (HOLDLOCK, TABLOCKX)
 
			--	Test de l'existance de l'email donc du client
			if(exists(SELECT * FROM clients WHERE email = @email))
			BEGIN
				set @codeRet = -2;
				set @message = 'Ce mail existe déjà';
				rollback transaction	;			
			END
			else
			BEGIN
				INSERT INTO clients(nom, prenom, numRue, rue, codePostal, ville, pays, email, motPasse)
							VALUES(@nom, @prenom, @numRue, @rue, @cp, @ville, @pays, @email, @hash);
				set @codeRet = @@IDENTITY;
				set @message = 'ok';
				Commit transaction
			END
		end try
		begin catch
			set @codeRet = -3;
			set @message = 'Erreur Base de donnée' + ERROR_MESSAGE();
			rollback transaction;
		end catch
	END
 
	RETURN	
GO
voici l'appel de la procèdure via linq
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
    public static string InscrireClient(string nom, string prenom, Int16 nRue, string rue, string cp, string ville, string pays, string mail, string mdp, out ObjectParameter message, out ObjectParameter codeRet)
    {
        string retMethode = "";
        message = new ObjectParameter("message", typeof(String));
        codeRet = new ObjectParameter("codeRet", typeof(Int32));
        ALM_SEBOEntities db = new ALM_SEBOEntities();
 
        try
        {
            db.Database.Connection.ConnectionString = Connexion.getInstance().ConString;
            db.Database.Connection.Open();
            db.CreerClient(nom, prenom, nRue, rue, cp, ville, pays, mail, mdp, message, codeRet);
            db.Database.Connection.Close();
            retMethode = "ok";
        }
        catch(Exception exInscrClient)
        {
            retMethode = "Erreur: " + exInscrClient.Message;
        }
 
        return retMethode;
    }
 
    public static int IdentificationClient(string mail, string mdp, out ObjectParameter id)
    {
        ALM_SEBOEntities db = new ALM_SEBOEntities();
        id = new ObjectParameter("id", typeof(Int32));
        db.Database.Connection.ConnectionString = Connexion.getInstance().ConString;
        db.Database.Connection.Open();
        db.RecupererIdClient(mail, mdp, id);
        db.Database.Connection.Close();
 
        return (int)id.Value;
    }
merci d'avance pour votre aide