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 :

Type HASHBYTES SHA1


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut Type HASHBYTES SHA1
    Bonjour à tous et à toutes

    Je vous explique mon problème, j'ai une procédure stockée qui génére un mot de passe aléatoire (pas de soucis). Je la test avec le HASHBYTES justement de cette maniére :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    declare @newpwd varchar(20)
    exec generationMDP2 @len=8, @output=@newpwd out
    SELECT HASHBYTES('SHA1', @newpwd);
    Et ca me donne en resultat : 0x2A7F6285CDC7EB5D27F9624100A7E577E4FCD534

    Maintenant, j'ai une procédure stocké qui permet de rajouter un utilisateur dans ma base et je fais dans cette procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    declare @newpwd varchar(20)
    exec generationMDP2 @len=8, @output=@newpwd out
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Insert into Identifiants(Nom_identifiant, Mot_de_Passe) values(@Identifiant, HASHBYTES('SHA1', @newpwd));
    Le problème est que dans ma bdd, quand je regarde mon champs Mot_de passe j'ai des choses comme ça : 雒쒔䯀ꠗ恴뭅䣔ᯯ릱

    Du coup je suis content je sais d'où viennent les hiéroglyphes, mais c'était pas le but... I need your help


    Petite précision, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select mot_de_passe, cast(mot_de_passe as varbinary) from identifiants where id_identifiant = 61
    j'ai bien 0x2980397516E3037FFBAA2B71C7673F9D42CE8C6C qui apparait....

  2. #2
    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 le type de données de la colonne Mot_de_Passe ? Je parie sur nvarchar.
    Lorsque vous stockez une valeur de type varbinary sous le type nvarchar, SQL Server exécute une conversion implicite de type de données.
    C'est de là que proviennent les caractères Chinois (Ce ne sont pas des hiéroglyphes )

    @++

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Oui en effet, c'est du nvarchar... J'ai un peu tout essaye en fait mais surement pas ce qu'il faut...

    Parce que après, (quitte à être dans le bien nul) j'ai dû faire une fonction, pour récupérer le mdp, mais crypté, du coup j'ai fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ALTER function [dbo].[AuthentificationUsers2](@Identifiant varchar(50))
    returns @IdentifiantsUsers table(
    	IdIdentifiant varchar(50),
    	MDP nvarchar(50)
    	)
    as
    	begin
    	insert into @IdentifiantsUsers(IdIdentifiant,MDP)
    		SELECT nom_identifiant, cast(mdp_crypte as varbinary) as MDP FROM identifiants WHERE nom_identifiant= @Identifiant;
    	return
    end
    Mais bon, curieusement, j'ai mes signes Chinois tout mignons dans le champs mdp...

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    C'est marrant mais en mettant le champs mdp en varbinary beh curieusement ca marche... Je dois être un peu stupide, c'est la faute à mes parents

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par JeanYvette Voir le message
    c'est la faute à mes parents
    c'est la faute DE mes parents.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Voui je sais

    En tout cas merci d'être passé sur mon post, j'ai pu comprendre mon erreur. Au final mon tuteur ca ne lui plait pas, je me lance donc dans de nouvelles aventures de chiffrement

    Merci et bisous

  7. #7
    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
    Ne vous est-il pas possible de mettre la colonne stockant le mot de passe en varbinary aussi ?
    Vous pouvez ensuite procéder au décryptage au sein de l'application.

    @++

  8. #8
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Alors si ce que j'ai fait c'est que mon mdp est bien en varbinary tout ca, j'arrive a l'encrypter avec une clé symétrique elle meme crypté avec de l'assymetrique
    J'arrive à lire mes données avec une requête simple du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    OPEN SYMMETRIC KEY SKey DECRYPTION BY ASYMMETRIC KEY AKey ;
    select mot_de_passe,  CONVERT(NVARCHAR, DecryptByKey(MDP_crypte)) as Password
    from identifiants
    CLOSE SYMMETRIC KEY SKey ;
    Mais quand je tente de le mettre dans une fonction comme ;

    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
     
    GO
     
    ALTER function [dbo].[GetPassword](@IdUtilisateur int)
    returns nvarchar(max)
    as
    	begin
    	OPEN SYMMETRIC KEY SKey DECRYPTION BY ASYMMETRIC KEY AKey ;
    		declare @Mdp nvarchar(max);
    		set @Mdp = (select DecryptByKey(MDP_crypte)
    		from identifiants,utilisateurs
    		where id_utilisateur = @IdUtilisateur and identifiants.id_identifiant = utilisateurs.id_identifiant) 
    	CLOSE SYMMETRIC KEY SKey ;
    	return @Mdp;
    end
    J'ai deux belles erreurs :
    Msg 443, Level 16, State 14, Procedure GetPassword, Line 6
    Utilisation non valide d'un opérateur présentant des effets secondaires ou d'un opérateur dépendant du temps 'OPEN SYMMETRIC KEY' dans une fonction.
    Msg 443, Level 16, State 14, Procedure GetPassword, Line 11
    Utilisation non valide d'un opérateur présentant des effets secondaires ou d'un opérateur dépendant du temps 'CLOSE SYMMETRIC KEY' dans une fonction.


    Du coup je me demande si on peut le faire de suite dans une fonction mais je doute....

    Non tout vas bien je suis juste idiot

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    IMPORTANT... effectuer un hachage ne constitue aucunement un chiffrement ! Erreur hélas largement répandue...

    A lire : http://blog.developpez.com/sqlpro/p1...dans-les-sgbdr

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Désolé du temps de réponse sur ce post, merci encore pour ton aide, j'ai trouvé mon bonheur
    Et oui je sais que hash est différent de chiffrement, erreur de Français, désolé

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

Discussions similaires

  1. Obtenir un VARCHAR(40) à partir d'un HASHBYTES SHA1
    Par gderenne dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/07/2007, 19h35
  2. Algorithme hachage type Md5 ou sha1
    Par shaun_the_sheep dans le forum Sécurité
    Réponses: 5
    Dernier message: 22/09/2006, 17h47
  3. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

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