Comment puis-je stocker les parameters du programme?

Je crée une application de bureau qui sera installée sur un PC et vérifie occasionnellement les mises à jour de divers parameters sur un serveur Web.

Le programme utilisera ces parameters fréquemment, donc je voudrais mettre en cache les parameters dans un fichier sur le PC afin qu’il ne soit pas nécessaire de bash le serveur constamment. Il y a beaucoup de parameters. Je pensais à les stocker dans un fichier XML mais j’ai besoin que le fichier soit illisible par les utilisateurs du PC.

Comment dois-je stocker les parameters du PC sur lesquels le programme peut lire et écrire, mais que l’utilisateur ne peut pas lire?

EDIT: Désolé les gars. L’application est écrite en C # en utilisant .NET 2.0. L’application ne fonctionnera que sous Windows. C’est une application de console qui s’exécutera en tant que service Windows.

Si l’application est un service, elle peut s’exécuter sous un compte autre que celui de l’utilisateur. alors il est assez facile de garder le fichier caché de lui.

En tant qu’application Windows, vous avez le choix entre le registre, un fichier ou une firebase database locale. Pour les fichiers, vous avez le choix entre un simple fichier de propriétés ou un fichier XML.

Pour chacun de ceux-ci, votre choix de crypté (juste au cas où) ou non.

En supposant que vous ciblez la plate-forme Windows, vous pouvez soit

  • utiliser le registre
  • utiliser un fichier de configuration
  • ou utiliser une firebase database

Les données peuvent être chiffrées dans les 3 cas si nécessaire. Si vous avez vraiment beaucoup de parameters, le registre n’est probablement pas le moyen le plus facile de le faire. Si vous avez une application .net, regardez SQL Server Compact Edition, elle est vraiment légère, facile à déployer avec votre application et ne nécessite pas d’environnement d’exécution.

Si c’est sur la machine des utilisateurs finaux, tôt ou tard, ils peuvent le lire. Si le programme est exécuté sur leur ordinateur local, ils peuvent le faire comme bon leur semble. S’il s’agit d’une sorte de programme client-serveur, vous ne pouvez tout simplement pas faire confiance à ce que le client dit.

L’un des moyens les plus simples de stocker des parameters dans .Net consiste à créer une classe contenant tout ce dont vous souhaitez suivre, puis à la sérialiser vers et depuis le disque. Comme ce fichier ne fait que servir de cache, vous pouvez probablement utiliser un formateur binary, ce qui rendra le fichier uniquement lisible par ceux qui savent ce qu’ils font.

Veillez à enregistrer les parameters dans un répertoire convivial UAC comme ApplicationData .

vous pouvez écrire les configurations d’aplication dans un fichier XML comme celui-ci

       

Indépendamment du fait que vous stockiez ces parameters localement, si vous les chargez en mémoire, un utilisateur peut les lire. Si vous les transférez sur un réseau, il est assez simple d’parsingr les paquets réseau, même sur une connexion cryptée. Il existe de nombreux outils pour gérer votre propre connexion réseau (j’ai utilisé OpenSTA pour cela). , même si ce n’est pas exactement fait pour ça). Quelqu’un qui veut vraiment voir ce que vous utilisez pour les parameters pourra les voir si vous utilisez quelque chose sur leur ordinateur.

Maintenant, cela étant dit, la solution la plus simple consiste probablement à les conserver en XML et à les chiffrer. Même en compressant simplement le fichier et en modifiant l’extension, les gens ne sont que curieux de savoir quels parameters vous avez.

Les parameters sont assez faciles dans C # .net. La création d’un fichier de parameters peut être effectuée via les pages de propriétés du projet (onglet Paramètres). Ensuite, si vous le souhaitez, vous pouvez choisir le fichier de parameters et chiffrer l’élément xml racine avec des clés symésortingques ou asymésortingques.

Ensuite, comme d’autres l’ont mentionné, conserver les clés et les routines pour modifier les parameters des mains de l’utilisateur est un autre problème. Vous pouvez envoyer les parameters au serveur sur lequel la clé privée existe en ne conservant que la clé publique sur le client pour le décryptage, demander au serveur d’effectuer le cryptage / la signature. Toute altération des parameters du client que vous connaissez, car la signature échouerait. Ainsi, si les parameters sont enregistrés localement, l’utilisateur ne peut pas les lire sans un peu de code et vous ne pouvez les décrypter que pour les utiliser. l’écriture / la création serait faite par le serveur.

Votre idée pour une configuration XML est un bon début (le DOM XML est facile à naviguer, bien connu, documenté, etc.).

Si vous ne souhaitez pas que l’utilisateur puisse lire / modifier les parameters, vous pouvez le conserver en mémoire, mais vous risquez de perdre les données de l’exécution à l’exécution. Vous n’avez pas semblé indiquer que l’application serait redémarrée bien que cela puisse fonctionner pour vous. Il existe également la possibilité de détecter le moment où l’application est en cours de fermeture et vous pouvez ensuite vider le cache sur le disque.

Vous êtes concerné par les utilisateurs lisant le fichier ou le modifiant?

Indépendamment – vous pouvez le chiffrer avec une clé aléatoire et l’enterrer quelque part dans le registre