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 :

Cryptage champs mot de passe dans une base de données


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut Cryptage champs mot de passe dans une base de données
    Salut à tous,
    Je suis entrain de travailler dans un mini projet mail.
    La question que je me pose, c'est le stockage des mots de passe utilisateurs dans la base de données (base de données SQL Serveur).
    Maintenant je stocke les mots de passe tel qu'ils sont saisis, comment je pourrai les crypter pour les stocker, puis au besoin de les décrypter pour par exemple vérifier l'identification des utilisateurs.
    Merci à vous.

  2. #2
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Ce qu'il te faut faire par exemple c'est d'utiliser le cryptage md5 pour stocker tes données.
    Ensuite si tu veux vérifier si le mot de passe est bon, il faut que tu crypte avec md5 le mot de passe entrée par l'utilisateur et qu'ensuite tu compares le résultat avec ton champ en base de données.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Tu peux utiliser le md5 :

    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
     
    using System.Security.Cryptography;
     
    /// <summary>
    /// Retourne le MD5 d'une chaine de caractère.
    /// </summary>
    public static String GetMD5(String Texte)
    {
            String md5Hash = "";
            MD5CryptoServiceProvider x = new MD5CryptoServiceProvider();
            byte[] data = Encoding.ASCII.GetBytes(Texte);
            data = x.ComputeHash(data);
            md5Hash = Encoding.ASCII.GetString(data);
            return md5Hash;
    }
    Le principe est simple, au lieu de comparer tes 2 mots de passe directement, tu compare les 2 md5 de tes mots de passe.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Merci à vous pour l'idée. Je suis très nouveau dans le domaine, je suis un développeur Oracle, mais j'ai une proposition de développer en Dot.NET (Asp.net & c#).
    Donc le MD5 c'est une technique de cryptage prédéfinie?
    Merci Aeronia pour ce script.

    Par exemple, juste pour apprendre, si je veux décrypter les mots de passes, genre si l’utilisateur veux connaitre son mot de passe que je peux lui envoyer pas mail?

    On apprends vraiment sur ce forum.
    Mes remerciements.

  5. #5
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Le MD5 n'est pas réversible.
    S'il a oublié son mot de passe le mieux est de lui en générer un nouveau et tu enregistre le md5 de ce nouveau mot de passe en base de données.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    A ma connaissance, il n'est pas possible de récupérer la chaine d'origine après un hachage md5.

    Dans le cas ou tu souhaites crypter et décrypter, tu peux utiliser les 2 méthodes suivantes :

    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
     
    /// <summary>
    /// Crypte un tableau de bytes avec la clé spécifiée
    /// </summary>
    public static byte[] Encrypt(byte[] plainData, string sKey)
    {
          DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
          DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
          DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
          ICryptoTransform desencrypt = DES.CreateEncryptor();
          byte[] encryptedData = desencrypt.TransformFinalBlock(plainData, 0, plainData.Length);
            return encryptedData;
    }
    /// <summary>
    /// Décrypte un tableau de bytes avec la clé spécifiée.
    /// </summary>
    public static byte[] Decrypt(byte[] encryptedData, string sKey)
    {
          DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
          DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
          DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
          ICryptoTransform desDecrypt = DES.CreateDecryptor();
          byte[] decryptedData = desDecrypt.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
           return decryptedData;
    }
    Cependant il est je pense, préférable d'utiliser un md5 pour la sauvegarde d'un mot de passe et de mettre au point un système automatique de modification/réinitialisation de mot de passe.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 25
    Points
    25
    Par défaut
    MD5 est un algo de cryptage qui n'est pas réversible (à part par force brute).
    Donc si ton utilisateur perd son mot de passe tu en génères un nouveau que tu lui envoies.

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par drissi Voir le message
    Merci à vous pour l'idée. Je suis très nouveau dans le domaine, je suis un développeur Oracle, mais j'ai une proposition de développer en Dot.NET (Asp.net & c#).
    Donc le MD5 c'est une technique de cryptage prédéfinie?
    Non, c'est une technique de hash (donc non bijective, contraitement au cryptage).

    Merci Aeronia pour ce script.
    Euh ... c'est du C#, pas un script (.Net n'a pas de langage de script).

    Par exemple, juste pour apprendre, si je veux décrypter les mots de passes, genre si l’utilisateur veux connaitre son mot de passe que je peux lui envoyer pas mail?
    Non, car le hash est non bijectif. D'une manière général,un site qui est capable de me rappeler mon mot de passe si je le perd, et bien je le fuis. En effet, stocker des mots de passe cryptés, c'est bien joli, mais où stocke-t-on la clef de cryptage dans ce cas ? C'est pour cela que normalement, on ne crypte pas les mots de passe, on les hash.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Merci à vous TOUS pour vos conseils et explications.
    Donc le mieux c'est de régénérer un nouveau mot de passe en cas de besoin.
    Citation Envoyé par Bluedeep Voir le message
    Euh ... c'est du C#, pas un script (.Net n'a pas de langage de script).
    En fait, je sais que c'est du C#, OK, je le remercie pour ce bloc C#

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Est qu'il faut ajouter une référence? car lors de l'exécution, il me dit
    Le nom 'Encoding' n'existe pas dans le contexte actuel.
    EDIT: ça marche, j'ai ajouté le Remerciements,

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Pour utiliser le hashing, il faut ajouter l'assembly System.Security et l'using System.Security.Cryptography.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Ne pas utiliser MD5! Il n'est plus considéré comme sûr. Même SHA1 n'est plus considéré sur. Il faudrait utiliser SHA256. Dans l'absolu ca ne change pas grand chose entre les deux, juste la longueur du champs

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

Discussions similaires

  1. Crypter des mots de passe dans une base de données WordPress
    Par DarckCrystale dans le forum WordPress
    Réponses: 11
    Dernier message: 26/02/2021, 23h05
  2. [SQL] Mots de passe dans une base de données
    Par jockyboss777 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/02/2021, 16h47
  3. Comment sécuriser les mots de passe dans la base de données ?
    Par yacine.dev dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 07/04/2010, 10h59
  4. Réponses: 4
    Dernier message: 29/12/2009, 13h10
  5. Champs de type XML dans une base de données
    Par Flocodoupoil dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/07/2004, 18h57

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