Protéger un fichier xml contre les modifications faites par les utilisateurs

Soyez le premier à donner votre avis sur cette source.

Vue 13 453 fois - Téléchargée 669 fois

Description

Pour ma 2nd source, voilà un truc tout simple, j'en ai eu besoin pour les sauvegardes des parties de mon jeu de Monopoly, que je suis en train de faire, je poste donc une petite source ici. Je voulais que les sauvegardes soient non modifiables (ou pas facilement). J'ai donc développé un petit code qui permet de rajouter une ligne au fichier XML contenant un numéro d'identification. Ce numéro permet de voir si le fichier a été modifié ou pas. Par contre, le niveau de sécurité est très bas, mais ça limite déjà pas mal les "risques" de modifications externes au programme.
Le fonctionnement est très simple, le programme additionne la valeur ASCII de tous les caractères du fichier XML, de plusieurs façons (tous,1/2,1/3,1/4...) pour ensuite ne former qu'un seul nombre. Ce nombre peut donc être retrouvé et si le fichier est modifié à la main le numéro ne correspondra plus au numéro qui contient. Cela permet donc de minimiser les tentatives de triches dans pour des sauvegardes de jeux, de ne faire marcher vos applications avec uniquement des fichiers validés.

Source / Exemple :


Voir dans le Zip.

Conclusion :


J'ai essayé de commenter le code de la meilleure manière.
Il y a 3 fichiers XML fournis à titre d'exemple.

Vous pouvez visiter mon site : http://oximoron.free.fr vous y trouverez d'autres programmes avec notamment mon jeu de Monopoly, Merci.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

vi si tu regardes bien MD5 fonctionne sur le meme principe et tu trovues sur souceforge.net les clé md5 des packages poru t'assurer qu'ils n'ont pas été modifiés par une tierce personne.
vala t'as compris le système.

En cryptage tu peux chercher Rijndael (AES) ou blowfish qui sont les 2 plus connus dans le domaine.
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

Ça y est, j'ai compris, enfin je crois :)
Ça fait donc ces calculs sur tout un fichier puis ça génère une "clé" sans modifier le contenu du texte ? Je croyais que c'était du cryptage de fichier total moi, du coup c'est beaucoup plus intéressant, et c'est plus rapide en plus.
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

heu, je crois que tu n'as pas compris le principe du hashage.
Il consiste à fournir une chaine de longueur fixe à partir d'un contenu de longueur variable. Il s'agit exactement de la même chose que toi à la différence près qu'autre moindre octet modifié, si tu recalcules le hashage il sera différent..
Avec ta méthode, on s'aperçoit de la modification seulement si la somme des modifications ne s'annulent pas entre elles.

En gros avec ton système : abcd = dcba ce qui est sûr n'est pas sécurisé du tout.
Cela ressemble aux checksum de contrôle qu'il y avait sur certains jeux. Le contournement était assez facile.
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

C'est clair que ma méthode n'est carrément pas sécurisée et ce n'était pas mon but, moi je voulais juste mettre un verrou (pas 50 portes blindées :) ) pour rendre la modification plus difficile. Je trouve déjà ça pas mal comme protection, car elle couvre tout le fichier et le fichier reste lisible après alors qu'avec le hachage... pas trop et ça alourdis quand même pas mal le fichier je trouve.
Donc, je dirais chacun son cryptage, le hachage pour les login / mots de passe / N° de carte bleue :) ...
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

additionner c'est bien mais 2+2 = 3+1
Un jour des p'tits gars ont inventé un truc génial, les tables de hashage.
Pour info Sha512 n'a pas encore été cassé pour produire des colissions volontaires ;p

// Convert plain text into a byte array.
public static string ConvertTextToSha512(string textToConvert)
{
byte[] plainTextBytes = Encoding.UTF8.GetBytes(textToConvert);
return CryptoUtility.ConvertTextToSha512 (plainTextBytes);
}

public static string ConvertTextToSha512(byte[] textToConvert)
{
// Initialize a random number generator.
//System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();

// Because we support multiple hashing algorithms, we must define
// hash object as a common (abstract) base class. We will specify the
// actual hashing algorithm class later during object creation.
System.Security.Cryptography.HashAlgorithm hash = new System.Security.Cryptography.SHA512Managed();

// Compute hash value of our plain text with appended salt.
byte[] aHashBytes = hash.ComputeHash(textToConvert);

return Convert.ToBase64String(aHashBytes);
}
Afficher les 9 commentaires

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.