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

Soyez le premier à donner votre avis sur cette source.

Vue 13 476 fois - Téléchargée 805 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

SharpMao
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
51 -
Génial, il ma fallait justement quelque chose comme ça, mais je n'avais pas encore eu le temps de chercher.

Juste un détail, j'ai oté deux lignes au début :

if (appSetting.SectionInformation.IsProtected)
DecryptConfigFile();

Avec ces deux lignes, le fichier de config était en clair durant le temps d'éxécution de l'application, alors que ce n'est pas nécessaire pour lire ou éditer les valeurs.

Merci pour ton aide,

Sharpmao
cs_fcolo
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
1 -
:) 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
woot6768
Messages postés
397
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007
-
Merci pour ton travail!
Bonne source.
Woot
the_revival
Messages postés
6
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
3 novembre 2006
-
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 :)
madebyhisto
Messages postés
27
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
11 mai 2011
2 -
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

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.