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 :

Crypter un Password par Hash MD5 [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut Crypter un Password par Hash MD5
    Bonjour,

    j'ai codé ceci

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace Password
    {
        public partial class Password : Form
        {
            public Password()
            {
                InitializeComponent();
            }
     
            private void OK_Click(object sender, EventArgs e)
            {
                String Password = (this.PasswordBox.Text);
                String Pass = "********";
                String Msg = "Mot de passe Invalide";
                String Licence = "0";
                if (Password.CompareTo(Pass) == 0)
                {
                    Licence = "1";
                    Msg = "Mot de passe Valide";
                }
                MessageBox.Show(Msg);
     
                string text;
                System.IO.StreamWriter sw = new System.IO.StreamWriter(".\\Licence.txt");
                text = "Licence=";
                sw.WriteLine("{0}", text+Licence);
                sw.Close();
     
                Application.Exit();
            }
     
            protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                if (keyData == Keys.Enter)
                {
                    String Password = (this.PasswordBox.Text);
                    String Pass = "********";
                    String Msg = "Mot de passe Invalide";
                    String Licence = "0";
                    if (Password.CompareTo(Pass) == 0)
                    {
                        Licence = "1";
                        Msg = "Mot de passe Valide";
                    }
                    MessageBox.Show(Msg);
     
                    string text;
                    System.IO.StreamWriter sw = new System.IO.StreamWriter(".\\Licence.txt");
                    text = "Licence=";
                    sw.WriteLine("{0}", text+Licence);
                    sw.Close();
     
                    Application.Exit();
                    return true;
                }
                return base.ProcessCmdKey(ref msg, keyData);
            }
     
        }
    }
    pour gérer l'accès à une application.
    Le problème est que le password est non crypté dans le code, donc pas sécurisé.

    J'aimerais faire un Hash MD5 sur le code saisi dans PasswordBox et le comparer avec le Hash MD5 du password autorisé.
    De cette manière seul le Hash MD5 du password sera disponible dans le code.
    Ce n'est pas inviolable, mais si le password n'est trop light, il faudra déjà avoir envie pour le trouver.

    Sauriez vous me dire comment procéder? Je reviens de la MSDN Microsoft et soit je ne comprends rien, ou ce n'est pas fait pour être clair pour les béotiens du C# comme moi.

    Merci de votre aide.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    MD5 c'est du hashage, on ne peut pas retrouver la valeur original (excluant raindbow table et blablabla), crypter/chiffrer requière une clé et permet de retrouver la donnée originale.

    Et puis MD5 on ne devrait plus utiliser ça, c'est complètement dépassé. Personnellement j’utilise BCrypt.

    Sinon il te faut transformer ton texte en array de byte, ensuite tu le passes aux méthodes de hash, et tu reconverties en string le tout (base64 ou hex).

    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
    static void Main(string[] args)
    {
    	string password = "toto";
    	byte[] raw = UTF8Encoding.UTF8.GetBytes(password);
     
    	byte[] hash;
    	using (MD5 md5Hash = MD5.Create())
    	{
    		hash = md5Hash.ComputeHash(raw);
    	}
     
    	StringBuilder sBuilder = new StringBuilder();
    	for (int i = 0; i < hash.Length; i++)
    		sBuilder.Append(hash[i].ToString("x2"));
     
    	Console.WriteLine(sBuilder.ToString());
     
    	Console.ReadKey();
    }
    Si tu utilises BCrypt...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    static void Main(string[] args)
    {
    	string password = "toto";
     
    	string hashedPassword = BCrypt.HashPassword(password);
     
    	if (BCrypt.Verify(password, hashedPassword))
    		Console.WriteLn("Mot de passe valide!");
    	else
    		Console.WriteLn("Mot de passe invalide!");
     
    	Console.ReadKey();
    }

  3. #3
    Membre confirmé Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut
    Bonsoir,

    partant du code que vous m'avez fourni, j'ai essayé de l'adapter à mon cas de figure ( A savoir je veux faire un Hash MD5 de ce qui est saisi dans PasswordBox)

    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
    public void Main(string[] args)
            {
                string password = (this.PasswordBox.Text); //récupère le contenu de PasswordBox
                byte[] raw = UTF8Encoding.UTF8.GetBytes(password); //converti Password en Byte dans la variable raw
                byte[] hash; //défini Hash en byte
                using (MD5 md5Hash = MD5.Create())
                {
                    hash = md5Hash.ComputeHash(raw); //crée le Hash de raw et le mets dans la variable hash
                }
                StringBuilder sBuilder = new StringBuilder(); //Là ça se complique et je ne comprends pas le code
                for (int i = 0; i < hash.Length; i++)
                    sBuilder.Append(hash[i].ToString("x2"));
                Console.WriteLine(sBuilder.ToString());
                Console.ReadKey();
            }
    De ce fait comme je ne saisi pas le code qui permet de convertir hash en variable string, je ne sais pas comment récupérer la variable string qui contient la convertion en string de hash en byte et en faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.show(Hashstring);
    par exemple

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    C'est le StringBuilder contient le hash en version hexadécimal. Simplement utiliser ce bout de code pour pousser la valeur quelque part :

  5. #5
    Membre confirmé Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut
    Ok,

    Après avoir essayé plusieurs idées, j'ai trouvé comment utiliser ta commande.
    Tout fonctionne à la perfection.

    Merci.

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

Discussions similaires

  1. [9i] Comportement des sous-partitions par Hash
    Par saysay dans le forum Administration
    Réponses: 6
    Dernier message: 06/08/2008, 16h44
  2. [phpBB] Récupération des hash MD5 et login (phpbb) pour transfert
    Par julian-brokendolls dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 29/03/2006, 17h29
  3. [9i] sous-partition par hash
    Par saysay dans le forum Oracle
    Réponses: 5
    Dernier message: 02/02/2006, 10h17
  4. Réponses: 17
    Dernier message: 19/01/2006, 13h51
  5. Login Password par défaut
    Par YanK dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/09/2003, 14h34

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