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 :

C# et l'authentification


Sujet :

C#

  1. #1
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut C# et l'authentification
    Bonjour,
    J'aimerais ajouter un mot de passe associé à un identifiant qui permettrait de donner accès à l'application.

    Comment applique-t-on ceci à une zone de saisie qui est cryptée pour le mot de passe et qui doit vérifier si la saisie correspond bien à l'identifiant.

    J'aimerais déjà essayer pour un couple d'identifiant et de mot de passe.
    Merci pour votre aide !

  2. #2
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    Personne ne peut m'aider!!

  3. #3
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Par défaut
    If faut stocker en base de données la valeur cryptées correspondant au mot de passe.
    A la saisie d'un mot de passe, il faut crypter la saisie et la comparer avec la valeur en base

  4. #4
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    comment je peut crypter la saisie du mot de passe?

  5. #5
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    sachant que j'ai utulisé ce code mais ça n'a pas marché


    HashTable loginsKeys = new HashTable();
    loginsKeys.Add("toto", "passwordDeToto" );

    //Ensuite pour la saisie du mot de passe, pour ne pas visualiser les caractères saisis :
    TextBox txtPassword;
    txtPassword.PasswordChar = (char)0x25CF;

    //Et finalement, pour la validation :
    if( loginsKeys[ txtLogin.Text ] == null )
    {
    // Login inconnu
    }
    else if( ! loginsKeys[ txtLogin.Text ].Equals( txtPassword.Text ) )
    {
    // Mot de passe incorrect
    }
    else
    {
    // Utilisateur authentifié
    }

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Je pense que tu devrais faire des recherches du coté de la cryptographie.

  7. #7
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    j'ai téléchargé le code source de cryptologie existant dans developpez.com.
    Mais le problème c'est que je n'ai pas pu utiliser ce code puisque je suis débutante.

  8. #8
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonjour,

    Citation Envoyé par etoile_de_vie Voir le message
    Mais le problème c'est que je n'ai pas pu utiliser ce code puisque je suis débutante.
    C'est à dire ?

    C'est un algorithme de cryptage symétrique ou asymmétrique ?

  9. #9
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    c'est un algo symetrique; l'algo de RijndaelManaged

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Une solution couramment utilisée pour crypter un mot de passe dans ce genre de scenario est le hash MD5. La classe System.Security.Cryptography.MD5CryptoServiceProvider permet de réaliser cette opération. Les étapes sont les suivantes :
    1. Convertir le mot de passe en tableau d'octets
    2. Calculer le hash MD5 avec MD5CryptoServiceProvider.ComputeHash
    3. Eventuellement, reconvertir le hash MD5 (qui est un tableau d'octets) en chaîne hexadécimale.

    Avec un petit bout de code ce sera plus clair :
    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
     
            public static string MD5Hash(string text)
            {
                MD5CryptoServiceProvider md5 = MD5.Create() as MD5CryptoServiceProvider;
                byte[] textBytes = Encoding.Unicode.GetBytes(text);
                byte[] md5Bytes = md5.ComputeHash(textBytes);
                string hash = ByteArrayToHexString(md5Bytes);
                return hash;
            }
     
            private static string ByteArrayToHexString(byte[] bytes)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < bytes.Length; i++)
                {
                    sb.AppendFormat("{0:X2}", bytes[i]);
                }
                return sb.ToString();
            }

  11. #11
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    est ce que j'utilise ce code avec le premier?
    S'il vous plait j'ai besoin vraiment de votre aide.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Utilise la fonction MD5Hash (dans mon post précédent) :
    - à la création d'un utilisateur, pour crypter le mot de passe avant de le stocker dans la base
    - pour vérifier le mot de passe à la connexion : tu cryptes le mot de passe saisi, et tu compares avec la valeur stockée en base

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    J'ai l'impression qu'on s'égare un peu en fait...
    As-tu besoin de crypter le mot de passe pour le stocker, ou seulement d'afficher des caractères bidon dans la boîte de texte de saisie du mot de passe ?
    Si tu n'as pas besoin de le crypter, le code que tu as posté au début (avec le hashtable) me semble correct... sauf que la classe s'appelle Hashtable et non HashTable (pas de majuscule sur le T), c'est peut-être pour ça que ça ne marche pas.

  14. #14
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    Citation Envoyé par tomlev Voir le message
    As-tu besoin de crypter le mot de passe pour le stocker, ou seulement d'afficher des caractères bidon dans la boîte de texte de saisie du mot de passe ?
    je veux crypter le mot de passe pour le stockage et meme à la saisie les caractères doivent être crypté.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par etoile_de_vie Voir le message
    je veux crypter le mot de passe pour le stockage et meme à la saisie les caractères doivent être crypté.
    OK, là je crois que tu fais une confusion... à la saisie le mot de passe n'est jamais crypté : on affiche des étoiles ou autres caractères pour que le mdp ne soit pas visible, mais la propriété Text du textbox renvoie toujours le mot de passe en clair, sinon le programme ne pourrait pas l'utiliser.

    Si tu cryptes le mot de passe avant de le stocker, pour vérifier qu'un mot de passe saisi par l'utilisateur est correct, il faut aussi le crypter et vérifier que le résultat correspond bien au mdp crypté qui est stocké.

  16. #16
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    Citation Envoyé par tomlev Voir le message
    OK, là je crois que tu fais une confusion... à la saisie le mot de passe n'est jamais crypté : on affiche des étoiles ou autres caractères pour que le mdp ne soit pas visible.
    j'ai trouvé la solution pour cacher la visibilité de saisie du mot de passe à travers la propriété PasswordChar

    Si tu cryptes le mot de passe avant de le stocker, pour vérifier qu'un mot de passe saisi par l'utilisateur est correct, il faut aussi le crypter et vérifier que le résultat correspond bien au mdp crypté qui est stocké.
    Si je crypte le mot de passe avant le stockage, je ne suis pas besoins de fonction de décryptage?

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par etoile_de_vie Voir le message
    Si je crypte le mot de passe avant le stockage, je ne suis pas besoins de fonction de décryptage?
    Non, justement. Prenons un exemple :

    - L'utilisateur "toto" a pour mot de passe "titi". A la création de l'utilisateur, on crypte ce mot de passe : supposons que ça donne "x89ze4fwxw5", on stocke cette valeur dans la base.
    - toto se connecte, supposons qu'il se plante dans son mot de passe en saisissant "tata" par exemple. On crypte "tata", ça donne "t74sd5f4aw". On compare ça avec le mdp crypté en base : "t74sd5f4aw" != "x89ze4fwxw5" => mot de passe incorrect !
    - Supposons maintenant qu'il tape son mot de passe correctement : "titi", crypté, donne "x89ze4fwxw5". On le compare à la valeur en base : "x89ze4fwxw5" == "x89ze4fwxw5" => mot de passe correct !

    Donc il n'y a pas moyen d'obtenir le mot de passe en clair à partir de sa version cryptée, mais ce n'est pas nécessaire. Un même mot de passe est toujours crypté de la même façon, et 2 mots de passe différents ne seront jamais (enfin, presque jamais...) cryptés de la même façon. Il suffit donc de comparer les mdp cryptés, il est inutile de manipuler les mdp en clair.

  18. #18
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    Mais pourquoi quand j'ulitlise ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Hashtable loginsKeys = new Hashtable();
    loginsKeys.Add( "toto", "passwordDeToto" );
    un message d'erreur est affiché:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error	1	Invalid token '(' in class, struct, or interface member declaration

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par etoile_de_vie Voir le message
    Mais pourquoi quand j'ulitlise ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Hashtable loginsKeys = new Hashtable();
    loginsKeys.Add( "toto", "passwordDeToto" );
    un message d'erreur est affiché:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error	1	Invalid token '(' in class, struct, or interface member declaration
    Ce n'est pas lié à cette instruction, tu as dû ouvrir une parenthèse à un endroit ou ce n'était pas prévu... double-clique sur l'erreur, il devrait t'indiquer où c'est. Sinon, fais voir une plus grande partie du code, parce que dans ces 2 lignes il n'y a pas d'erreur a priori...

  20. #20
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    Citation Envoyé par tomlev Voir le message
    double-clique sur l'erreur, il devrait t'indiquer où c'est.
    j'ai double cliqué et ceci est l'erreur

Discussions similaires

  1. [TIdSMTP] Envoi d'un mail avec authentification ?
    Par BACUS dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/06/2004, 16h18
  2. [C#] Authentification sur les fichiers Pdf
    Par ensisoft dans le forum ASP.NET
    Réponses: 14
    Dernier message: 04/05/2004, 12h10
  3. [Débutant]Classe d'Authentification : compilation impossible
    Par acyclique dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/08/2003, 19h42
  4. Authentification Sécurisée
    Par HPJ dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/06/2003, 10h45
  5. [POSTGRES] pb configuration authentification
    Par Fyna dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/06/2003, 19h16

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