Decrypter un mot de passe [Résolu]

Messages postés
125
Date d'inscription
dimanche 28 février 2010
Dernière intervention
21 juin 2015
- - Dernière réponse : theflayer
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Dernière intervention
21 juin 2015
- 25 juil. 2012 à 10:11
Salut salut ,

je me suis mis à Mysql sur C# avec le driver C# de Mysql et je bloque sur un petit soucis, je pense ne pas être loin (je pense).

En faite j'enregistre dans ma BDD un mot de passe crypter, pas de soucis, par contre dans le sens inverse c'est plus délicat. voici ma fonction :


        private void Lister(string sFiltre, string sValeur)
        {   //fonction rechercher users
            dataGridView1.Visible = true;

            string sMyConnSQL = "SERVER=localhost;DATABASE=inventory;UID=root;PASSWORD=info;";

            MySqlConnection connection = new MySqlConnection(sMyConnSQL);
            MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
            DataSet ds = new DataSet();
            connection.ConnectionString = sMyConnSQL;

            connection.Open();

            if (sFiltre == "")
            {
                string cmd = "SELECT users.Identifiant, Prenom, Nom, Etage, Ip, Poste, poste.Materiel, Mdp_Systeme, Mdp_Zimbra FROM users ";
                cmd +"INNER JOIN mdp ON(users.Identifiant mdp.Identifiant) ";
                cmd +"INNER JOIN poste ON(users.Identifiant poste.Identifiant) ";

                MyAdapter.SelectCommand = new MySqlCommand(cmd, connection);
                MyAdapter.Fill(ds);

                dataGridView1.DataSource = ds.Tables[0]; 

string valu = (string)dataGridView1.Rows[2].Cells[8].Value;
MessageBox.Show(valu);
dataGridView1.Rows[2].Cells[8].Value = UnprotectPassword(valu);
                dataGridView1.Refresh();
            }
            else
            {
                string cmd = "SELECT users.Identifiant, Prenom, Nom, Etage, Ip, Poste, poste.Materiel, Mdp_Systeme, Mdp_Zimbra FROM users ";
                cmd +"INNER JOIN mdp ON(users.Identifiant mdp.Identifiant) ";
                cmd +"INNER JOIN poste ON(users.Identifiant poste.Identifiant) WHERE " + sFiltre + "='" + sValeur + "'";

                MyAdapter.SelectCommand = new MySqlCommand(cmd, connection);
                MyAdapter.Fill(ds);

                dataGridView1.DataSource = ds.Tables[0];
                dataGridView1.Refresh();  
            }
            connection.Close();
        }



j'ai mit en rouge la ou ça coince.
J'arrive a récupérer la valeur de la cellule, mais au moment de la décrypter, il me dit : "Paramètre incorrecte" au niveau de ma fonction :


        static string UnprotectPassword(string protectedPassword)
        {
            byte[] protectedBytes = Convert.FromBase64String(protectedPassword);
            byte[] bytes = ProtectedData.Unprotect(protectedBytes, null, DataProtectionScope.CurrentUser);
            return Encoding.UTF8.GetString(bytes);
        }



ci vous avez une petite idée pour que toutes les cellules à la colonne 8 soit décrypter, je suis preneur .
Merci d'avance.

-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Dernière intervention
21 juin 2015
3
Merci
Salut, ok c'est bon j'ai trouvé

Donc en faite le problème c'était tous simplement pas coté C# mais coté MySQL...
J'avais mis un Varchar trop petit du coup il me coupait une partie du mot de passe crypter lors de l'enregistrement ..

Du coup j'ai l'ai agrandit et je rafraichis mon datagrid comme cité plus haut :

string valu = (string)dataGridView1.Rows[2].Cells[8].Value; 
dataGridView1.Rows[2].Cells[8].Value = UnprotectPassword(valu);
dataGridView1.Refresh();


Maintenant je vais essayer de boucler selon le nombre de ligne pour qu'il me le fasse sur toutes les lignes du datagrid, et si ça marche pas je reviens vous embêter

Merci à tous.
-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de theflayer
Messages postés
14325
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
18 décembre 2018
0
Merci
Bonjour,

Pourquoi ne pas comparer directement le mot de passe "crypté" ?
En général pour mes MDP, on utilise MD5 au minimum, donc pas de décryptage, car le mdp est hashé.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Commenter la réponse de NHenry
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Dernière intervention
21 juin 2015
0
Merci
Salut NHenry, oui d'habitude je fais des comparaisons aussi, mais la c'est différent, le but n'ai pas d'utiliser ce mot de passe pour accéder à quelque chose, en faite c'est un petit logiciel d'inventaire de parc et il y a une partie qui liste les utilisateurs avec leurs mots de passes, c'est pour ça que j'aimerais les décrypter.



-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
Commenter la réponse de theflayer
Messages postés
14325
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
18 décembre 2018
0
Merci
Bonjour,

Que fait ProtectedData.Protect ? (comme opération)
Car sans cela, dur de répondre.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Commenter la réponse de NHenry
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
0
Merci
Salut,

à part les méthodes d'encryption à clé, aucune des méthodes utilisées habituellement (hash MD5, SHA1 ...) ne permet de décrypter le message. Ces fonctions ne sont pas des bijections, c'est pour ça qu'on les utilise pour les mot de passe ;)

Après, il existe des méthodes pour tenter de récupérer des mots de passes hashés, mais c'est pas l'endroit pour en causer (hack), ni même le but recherché (logiciel d'entreprise).
Commenter la réponse de cs_jopop
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Dernière intervention
21 juin 2015
0
Merci
Salut,

en faite c'est 2 fonctions que j'ai trouvé pour crypter et décrypter des chaines de caractères.

Elles se présentent comme ceci :

        using System.Security.Cryptography; (Ajouter aussi la référence : System.Security au projet)

        static string ProtectPassword(string clearPassword)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(clearPassword);
            byte[] protectedBytes = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
            return Convert.ToBase64String(protectedBytes);
        }

        static string UnprotectPassword(string protectedPassword)
        {
            byte[] protectedBytes = Convert.FromBase64String(protectedPassword);
            byte[] bytes = ProtectedData.Unprotect(protectedBytes, null, DataProtectionScope.CurrentUser);
            return Encoding.UTF8.GetString(bytes);
        }

        // donc on a une chaine
        string sChaine = "bidule";

        //La je la crypt via la fonction ProtectPassword()
        string sChaine_Cryp = ProtectPassword(sChaine);

        //Cela me renvoi le mot de passe sous cette forme ci : 
        // AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA39Y1R1+Cu0yn7aXIYMUtDQAAAAAC

        // Et pour decrypter on utilise UnprotectPassword()
        sChaine = UnprotectPassword(sChaine_Cryp);

        //Ceci me renvoi "bidule"


En faite mon soucis n'est pas sur le décryptage qui fonctionne, mais sur le fait que je n'arrive pas à utiliser la fonction qui sert a ça sur une colonne de mon datagridview.

Donc j'avais pensé à quelque chose dans ce style :
string valu = (string)dataGridView1.Rows[2].Cells[8].Value; 
dataGridView1.Rows[2].Cells[8].Value = UnprotectPassword(valu);
dataGridView1.Refresh();


Mais ça me renvoi une erreur, pourtant valu récupéré bien le mot de passe sous la forme crypter ...

Merci





-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
Commenter la réponse de theflayer
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
0
Merci
Bon, je reviens de la fiche MSDN de ProtectData. L'encryption a l'air de fonctionner comme avec une clé (définit par le scope USER ou MACHINE).

Ton problème est côté interface en fait ?
Ta demande serait plutôt : "comment appliquer une fonction C# aux données d'un DataGridView, après remplissage depuis une BDD" ... bonne question
Commenter la réponse de cs_jopop

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.