Sauvegarder des données sensibles dans le fichier de configuration (cryptage) (.net2)

Soyez le premier à donner votre avis sur cette source.

Vue 14 519 fois - Téléchargée 895 fois

Description

J'ai une application de gestion de caméra IP pour laquelle je dois sauvegarder les paramètre de l'utilisateur.
Comme je dois sauvegarder des mots de passe, je sus obliger de protéger le fichier de sauvegarde.
On m'avait éguillé vers les IsolatedStorage (
Puis on m'a aiguiller vers le fichier de configuration de l'appli (http://www.csharpfr.com/infomsg_OU-COMMENT-SOUVEGARDER-MOTS-PASSE-TOUTE-SECURITE_752886.aspx et http://www.csharpfr.com/infomsg_APP-CONFIG_750223.aspx?p=2).
Après avoir trouver mon bonheur sur les MSDN ( http://msdn2.microsoft.com/fr-fr/library/system.configuration.dpapiprotectedconfigurationprovider.aspx ), je vous en fait également profiter.
Mon code n'est qu'une pale copie de celui des MSDN, a part que je crypte le AppSettings plutot que ConnectionStrings.

Source / Exemple :


void EncryptConfigFile()
        {
            if (appSetting != null)
            {
                if (!appSetting.SectionInformation.IsProtected)
                {
                    if (!appSetting.ElementInformation.IsLocked)
                    {
                        // Protect the section.
                        appSetting.SectionInformation.ProtectSection(provider);

                        appSetting.SectionInformation.ForceSave = true;
                        config.Save(ConfigurationSaveMode.Full);

                        MessageBox.Show("Section "+appSetting.SectionInformation.Name+" is now protected by "+appSetting.SectionInformation.ProtectionProvider.Name);
                    }
                    else
                        MessageBox.Show(
                             "Can't protect, section {0} is locked",
                             appSetting.SectionInformation.Name);
                }
                else
                    MessageBox.Show(
                        "Section " + appSetting.SectionInformation.Name + " is already protected by " + appSetting.SectionInformation.ProtectionProvider.Name);
            }
            else
                MessageBox.Show("Can't get the section "+ appSetting.SectionInformation.Name);
        }

        void DecryptConfigFile()
        {
            if (appSetting != null)
            {
                if (appSetting.SectionInformation.IsProtected)
                {
                    if (!appSetting.ElementInformation.IsLocked)
                    {
                        // Unprotect the section.
                        appSetting.SectionInformation.UnprotectSection();

                        appSetting.SectionInformation.ForceSave = true;
                        config.Save(ConfigurationSaveMode.Full);

                        MessageBox.Show("Section " + appSetting.SectionInformation.Name + " is now unprotected.");

                    }
                    else
                        MessageBox.Show(
                             "Can't unprotect, section " + appSetting.SectionInformation.Name + " is locked");
                }
                else
                    MessageBox.Show(
                        "Section "+appSetting.SectionInformation.Name+" is already unprotected.");

            }
            else
                MessageBox.Show("Can't get the section {"+appSetting.SectionInformation.Name);

        }

Conclusion :


Après avoir compilé le projet (j'espère que ca va fonctionner), lancez directement l'application depuis ./bin/debug/ sinon le fichier de configuration sera supprimé autmatiquement par visual studio.
Dans l'appli, entrez des enregistrement et fermer l'appli.
On vous demande si vous voulez crypter ou pas. A vous de voir les deux cas.
Ouvrez avec votre éditeur de texte le fichier de config et visualisez la différence.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
yannickcephas Messages postés 4 Date d'inscription mercredi 11 janvier 2012 Statut Membre Dernière intervention 27 octobre 2014
3 sept. 2012 à 12:13
Assez Bien !
Mais tous de même le problème de sécurité des données sensibles n'est pas résolue.
Pas grands effort à fournir pour décoder. Il suffit tout simplement copie le contenue du
fichier de configuration dans un autre application écrite en Visuel Studio pour vous tous
en claire.
Je me demandais justement s'il n'était pas possible d’insérer une Clé pour renforcé un tous
petit peut la sécurité.
madebyhisto Messages postés 26 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 11 mai 2011 2
17 juil. 2008 à 16:17
Super ton projet, je sais que ce projet est là depuis longtemps, mais voici un information intéressante.

Si tu veux que le debug puisse voir correctement le fichier de config dans de debug de visual studio il te faut 2 chose.

1) que ton fichier se nomme SaveAndEncryptConfigFile.exe.config au lieu de SaveAndEncryptConfigFile.config

2) que tu utilise la commande suivante :
ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath) au lieu de
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

Ensuite du lance le debug et ça fonctionne numéro 1
the_revival Messages postés 6 Date d'inscription vendredi 31 mars 2006 Statut Membre Dernière intervention 3 novembre 2006
31 oct. 2006 à 20:46
Merci pour ce code !

Même une fois crypté, l'appli en C# arrive a lire le contenu et à extraire les valeurs protégées avec un simple : "String css = ConfigurationSettings.AppSettings["myConnection"];"

Ce qui est impeccable car ma chaine de connexion MySQL n'est plus lisible :)
woot6768 Messages postés 393 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 23 mars 2007
20 juin 2006 à 09:56
Merci pour ton travail!
Bonne source.
Woot
cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 2
19 juin 2006 à 19:10
:) merci, je ne savais pas que l'on pouvait modifier les valeur cryptées.
Dans le source au moment de la lecture et de la sauvegarde des données, il y a les mêmes lignes, si tu veux les virer également ...

f.colo

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.