IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[LINQ] probleme de hash avec sha1


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 73
    Points : 59
    Points
    59
    Par défaut [LINQ] probleme de hash avec sha1
    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

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    lowString est de quel type?

Discussions similaires

  1. Probleme de requete avec LINQ
    Par TAMBOOH dans le forum Linq
    Réponses: 2
    Dernier message: 19/07/2010, 08h45
  2. Réponses: 2
    Dernier message: 23/05/2008, 20h25
  3. [Kylix] Probleme de séparateur avec Kylix2 ?
    Par jeanphy dans le forum EDI
    Réponses: 4
    Dernier message: 10/02/2003, 16h41
  4. Réponses: 12
    Dernier message: 23/10/2002, 11h56
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo