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

Développement SQL Server Discussion :

A propos de EncryptByPassPhrase


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 66
    Points : 68
    Points
    68
    Par défaut A propos de EncryptByPassPhrase
    Bonjour.

    Voici une question un peu bête mais j'utilise donc EncryptByPassPhrase pour crypter le contenu d'une textox de type password en ASP.NeT dont voici la syntaxe sous SQL Server 2008 Express :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DECLARE @PassPhrase nvarchar(50)
    SET @PassPhrase = N'test'
     
    DECLARE @EncryptedPassword varbinary(256)
    SET @EncryptedPassword = EncryptByPassPhrase(@PassPhrase , N'123456789', NULL)
    J'utilise donc un mot clef "test" pour crypter le contenu "123456789".

    Vous noterez que les "N" juste avant le passphrase et le mot de passe servent à indiquer que le texte est en caractères unicode.

    Quant je veux récupérer le contenu de ma colonne "MotDePasse" par DecryptByPassPhrase, jusque là, pas de soucis, cela fonctionne bien.

    Mon souci, c'est que quand je souhaite intégrer ce code à l'intérieur d'une procédure stockée, je récupère le mot de passe en paramètre, et pas moyen de mettre le N pour le unicode devant. Et si je ne met pas ce N devant le mot de passe, le decryptage ne se fait pas correctement...

    Exemple :

    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
     
    ALTER PROCEDURE dbo.blablabla
     
    @MotDePasse varchar(50)
     
    AS
    BEGIN
     
    SET NOCOUNT ON
     
    DECLARE @PassPhrase nvarchar(50)
    SET @PassPhrase = N'cow'
     
    DECLARE @EncryptedPassword varbinary(256)
    SET @EncryptedPassword = EncryptByPassPhrase(@PassPhrase , @MotDePasse, NULL)
     
    RETURN
     
    END
    Avec la variable @MotDePasse, donc, je ne sais pas appliquer le formatage unicode, je ne sais pas mettre ce : N devant

    Merci pour l'aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 66
    Points : 68
    Points
    68
    Par défaut
    Re-Bonjour, j'ai réussi alors je post la solution :

    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
     
    ALTER PROCEDURE blablabla
     
        @Login varchar(10),
        @MotDePasse varchar(50)
     
    AS
        BEGIN
     
            SET NOCOUNT ON
     
                DECLARE @PassPhrase nvarchar(50)
                SET @PassPhrase = N'test'
     
                DECLARE @MotDePasseModifie nvarchar(50)
                SET @MotDePasseModifie = N''
                SELECT @MotDePasseModifie = @MotDePasseModifie + @MotDePasse
     
                DECLARE @EncryptedPassword varbinary(256)
                SET @EncryptedPassword = EncryptByPassPhrase(@PassPhrase , @MotDePasseModifie, NULL)
     
                INSERT INTO dbo.aspnet_Colocation (Colocation, MotDePasse)
                    VALUES (@Colocation, @EncryptedPassword)
     
            RETURN
     
    END
    En clair il fallait créer une autre variable (@MotDePasseModifie) et appliquer le "N''" à l'intérieur et concaténer @MotDePasseModifie avec @MotDePasse.

    @+

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    N'aurait-il pas été plus simple de spécifier votre paramètre @MotDePasse en NVARCHAR(50) et non pas VARCHAR(50) ?

    @++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 66
    Points : 68
    Points
    68
    Par défaut
    Je n'avais pas fait la relation oO

    Merci beaucoup

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Points : 91
    Points
    91
    Par défaut
    Bonjour,

    Je relance un peu ce post car j'ai un petit souci. Je pense que mon problème vient du type ou de la taille de données mais je m'y perds un peu...

    Voici ma procédure stockée qui met a jour le mot de passe d'un utilisateur.

    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
    ALTER PROCEDURE [dbo].[UpdatePasswordForAgent]
    	-- Add the parameters for the stored procedure here
    	@IDAgent int,
    	@Password nvarchar(50)
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
    	-- les déclaration
    	DECLARE @PassphraseEnteredByUser nvarchar(128);
    	--DECLARE @MotDePasseModifie nvarchar(50);
    	DECLARE @check int;
     
    	--On va devoir crypter le mot de passe
     
    	SET @PassphraseEnteredByUser = N'Cette phrase doit servir à crypter les données. 56xf$93';
    	--SET @MotDePasseModifie = N'';
    	--SET @MotDePasseModifie = @MotDePasseModifie + @Password
    	SET  @Password = EncryptByPassPhrase(@PassphraseEnteredByUser,convert(varbinary,@Password), NULL);
     
    	--On verifie si le compte existe
    	SET @Check = (SELECT count(IDAgent) FROM Agent WHERE IDAgent=@IDAgent);
     
    	IF (@Check = 1)
    		BEGIN
    			-- On met à jour le password
    			UPDATE Agent
    			SET
    			Password = convert(varbinary,@Password)
    			WHERE IDAgent=@IDAgent
    			--On retourne 0 si tout est ok et 1 dans le cas contraire.
    			IF (@@ROWCOUNT = 1)
    				SELECT 0 as CodeRetour
    			ELSE
    				SELECT 1 as CodeRetour
    		END	
    	ELSE
    		-- Le compte n'existe pas !
    		SELECT 2 as CodeRetour
     
    END
    Le structure au niveau du mot de passe de la table Agent :

    Password(varbinary(256), not null)

    Mon souci, c'est quand je met plus de 3 caractères ça ne fonctionne plus.

    J'ai bien le code retour 0 mais dans ma procédure stockée qui sert à décrypter n'y arrive pas. Quand j'ai 3 caractères tout va bien.

    Voici la procédure de verif.

    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
    ALTER PROCEDURE [dbo].[LoginAgent] 
    	-- Add the parameters for the stored procedure here
    	@login varchar(50),
    	@password nvarchar(50)
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
    	--Declaration
    	DECLARE @PassphraseEnteredByUser nvarchar(128);
    	DECLARE @PassDB varbinary(256);
    	DECLARE	@PassDBDecrypt nvarchar(128);
     
    	-- Set des différentes variable
    	SET @PassphraseEnteredByUser='Cette phrase doit servir à crypter les données. 56xf$93';
    	SET @PassDB = (SELECT Password FROM Agent WHERE login=@Login);
    	SET @PassDBDecrypt = CONVERT(nvarchar,DecryptByPassphrase(@PassphraseEnteredByUser, @PassDB,null));
       	-- On contrôle si le mot de passe décrypté est équivalent au mot de passe renseigné
    	IF (@PassDBDecrypt = @Password)
    		BEGIN
    			UPDATE Agent SET DernierConnexion =  getdate() WHERE login=@Login
    			--On retourne 0 si tout est ok et 1 dans le cas contraire.
    			IF (@@ROWCOUNT = 1)
    				SELECT 0 as CodeRetour
    			ELSE
    				SELECT 1 as CodeRetour
    		END
    	ELSE
    		IF(@login = (SELECT Login FROM Agent WHERE login=@Login))
    			--Le mot de passe décrypté ne correspond pas au mot de passe renseigné
    			SELECT 2 as CodeRetour,@PassDBDecrypt
    		ELSE
    			-- Le login ne correspond pas ! 
    			SELECT 3 as CodeRetour
     
    END
    D'avance, merci pour votre aide.

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Quel est l'intérêt de crypter les mots de passe ?
    Si certains utilisateurs ne doivent pas les voir, il suffit de leur refuser le droit de lecture sur la colonne.

    Pour votre UPDATE, si vous écriviez directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE Agent
    SET Password = @Password
    WHERE IDAgent=@IDAgent
    A votre avis combien de lignes sont mises à jour si l'IDAgent que vous passez en paramètre n'existe pas ? Vous aurez un ROWCOUNT à 0 !
    Je pense qu'il est possible dans le code de votre application de savoir si la requête s'est bien déroulée et combien de lignes ont été affectées

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. A propos de Last_insert_id
    Par f-demu01 dans le forum Administration
    Réponses: 2
    Dernier message: 26/03/2003, 08h32
  2. A propos depth buffer
    Par j.yves dans le forum DirectX
    Réponses: 1
    Dernier message: 03/12/2002, 00h41
  3. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22
  4. Fonctionnement de la compression DivX
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/09/2002, 14h10
  5. A propos du composant DBGrid
    Par _Rico_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/07/2002, 09h18

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