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#] : Cryptage MD5


Sujet :

C#

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Par défaut [C#] : Cryptage MD5
    Bonjour,

    les mots de passe permettant d'accéder aux bases de données sont renseignés en clair dans le fichier de configuration de mon application.

    Je souhaiterais les protéger. Je voulais m'orienter vers un cryptage MD5.
    J'ai trouvé les codes suivants sur MSDN2 mais je ne sais pas comment faire pour ne pas renseigner tôt au tard le mot de passe dans mon appli.
    Pouvez-vous m'aider ?

    Merci et bonne journée.

    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
            public static string Crypter(string p_input)
            {
                    // Source : http://msdn2.microsoft.com/fr-fr/library/system.security.cryptography.md5(VS.80).aspx
     
                    // Create a new instance of the MD5CryptoServiceProvider object.
                    MD5 md5Hasher = MD5.Create();
     
                    // Convert the input string to a byte array and compute the hash.
                    byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(p_input));
     
                    // Create a new Stringbuilder to collect the bytes
                    // and create a string.
                    StringBuilder sBuilder = new StringBuilder();
     
                    // Loop through each byte of the hashed data 
                    // and format each one as a hexadecimal string.
                    for (int i = 0; i < data.Length; i++)
                    {
                        sBuilder.Append(data[i].ToString("x2"));
                    }
     
                    // Return the hexadecimal string.
                    return sBuilder.ToString();
            }
     
            // Verify a hash against a string.
            public static bool verifyMd5Hash(string p_input, string p_hash)
            {
                    // Source : http://msdn2.microsoft.com/fr-fr/library/system.security.cryptography.md5(VS.80).aspx
     
                    // Hash the input.
                    string hashOfInput = Crypter(p_input);
     
                    // Create a StringComparer an comare the hashes.
                    StringComparer comparer = StringComparer.OrdinalIgnoreCase;
     
                    if (0 == comparer.Compare(hashOfInput, p_hash))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
            }

  2. #2
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Je te propose une table dont l'accès en lecture est autorisé pour tous, qui contient le mot de passe crypté MD5. L'appli va lire le MD5, le décrypte et l'emploie pour accéder aux BD sensibles.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 101
    Par défaut
    On ne peut pas "décrypter" du MD5. C'est le Hash d'une chaine de caractères, et l'opération n'est pas réversible... Après, tu pourrais implémenter l'algo de Vigenère, pour crypter ton fichier de conf. Au lancement de l'appli, suffit de demander la clef à l'utilisateur, un coup de Vigenère et c'est bon
    C'est pas incassable, mais moins tu crypte d'information, moins y a de risques que ça pète. L'idéal étant d'utiliser une clef aussi grande que les chaines de caractères à crypter...
    http://fr.wikipedia.org/wiki/Vigen%C3%A8re

  4. #4
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Hum en effet, j'ai répondu un peu hativement sur le md5 (faut dire que ce n'est plus tout frais dans ma tete )

    Donc dans ma réponse précédente, remplacer MD5 par tout algo reversible.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string mdpCrypter = Crypter("mon mot de passe");

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    L'utilisation de MD5 est valide lorsque l'on a pas besoin du mot de passe en clair, comme pour une authentification lors de l'accès à une application. On vérifie alors que le hash du mot de passe saisi correspond au hash attendu. A ce moment le mot de passe saisi est correct.

    Dans ton cas c'est inutilisable car tu as besoin du mot de passe en clair. Il faudrait plutôt voir pour chiffrer ton fichier de configuration. Regarde ce sujet à tout hasard.

    Au passage, on ne parle pas de cryptage/crypter mais de chiffrement/chiffrer

  7. #7
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 928
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 928
    Par défaut Protection du mot de passe
    Bonjour tout le monde,

    Je me pose moi aussi des questions sur la protection du mot de passe, maintenant que mon application est prête à être mise en ligne.

    Je vois que cette réflexion s'inscrit en prolongement de la discussion qui a eu lieu ici, alors il me paraît intéressant de la poser ici. Peut-être devrai-je écrire un nouveau fil pour inviter du monde à venir lire ?

    J'ai moi aussi pensé à écrire un module de cryptage et le déployer sur le site.

    Toutefois il se pose encore une question : si on déconseille de mettre le mot de passe en clair dans le web.config, c'est qu'on considère que des "petits futés" sont capables de finir par le lire, et donc si ils trouvent le mot de passe en clair il ne leur faut plus guère longtemps pour accéder à la base.

    Ah bon. Mais alors, si ils peuvent lire le web.config, qu'est-ce qui nous fait penser qu'ils ne pourront pas télécharger le module de cryptage, aussi ?

    En fait, le conseil de Microsoft est d'utiliser le cryptage RSA niveau machine, par une commande comme
    aspnet_regiis -pef "connectionStrings" "Web-site-folder "

    ce qui fait apparaître dans le web.config des champs supplémentaires servant de support au cryptage, et les informations en clair n'apparaissent plus.

    Si je cherche encore un peu d'info, je vois que cryptage niveau machine signifie que les clefs de cryptage vont être conservées dans le registre du serveur (il faut que IIS soit installé). Ah bon. En corollaire, je suppose que la commande ci-dessus doit être tapée sur la console du serveur ? Là-dessus je suis quelque peu hésitant, et ça m'aiderait bien si quelqu'un pouvait m'éclairer un peu (par exemple en m'indiquant un newsgroup plus adapté ?). Le personnel du serveur ne semble pas très rôdé à cette manœuvre, ce qui me laisse penser que peut-être il y a quelque chose que j'ai mal compris, car ça m'étonnerait que je sois le premier client à avoir des chaînes de connexion à protéger.

    A défaut de réponse sur la mise en œuvre du cryptage RSA par aspnet_regiis, j'aimerais assez qu'on approfondisse la réflexion sur le stockage du module de cryptage et des clefs de cryptage.

    En puisant les clefs de cryptage dans la base de registre on évite que quelqu'un puisse faire tourner le module de cryptage sur une autre machine, mais alors le pirate, me semble-t-il, va plutôt chercher à ajouter une page pour lire la chaîne de connexion ?

  8. #8
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 928
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 928
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Regarde ce sujet à tout hasard.

    Au passage, on ne parle pas de cryptage/crypter mais de chiffrement/chiffrer
    Je reconnais que ça aurait été bienvenu que je fasse ça avant de "la ramener".
    Y compris les pages "ici" et "là".

    Toutefois, les procédures présentées avec configProtectionProvider font aussi appel à aspnet_regiis, alors comme je développe sous Windows XP Home, j'ai l'impression que je suis mal barré, non ? On ne peut pas installer IIS, là-dessus, si je ne m'abuse.

    Moui, si quelqu'un a un conseil à proposer ...

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Citation Envoyé par Gluups Voir le message
    (...) sous Windows XP Home (...) On ne peut pas installer IIS, là-dessus, si je ne m'abuse.

    Moui, si quelqu'un a un conseil à proposer ...
    Faire une recherche ?

    http://dotnet.developpez.com/articles/IIS-sous-XP-Home/

Discussions similaires

  1. [C#]Cryptage MD5
    Par dumser1 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 04/02/2008, 12h17
  2. Algo pour Cryptage Md5
    Par ..::snake::.. dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 25/05/2007, 00h46
  3. Comment utiliser le cryptage MD5 (Dimka Maslov) ?
    Par bds2006 dans le forum Delphi
    Réponses: 3
    Dernier message: 08/06/2006, 17h24
  4. [Sécurité] Cryptage MD5 et sécurité ?
    Par renaudjuif dans le forum Langage
    Réponses: 11
    Dernier message: 01/05/2006, 01h52
  5. Validation formulaire et cryptage md5
    Par nerick dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/01/2006, 10h49

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