CHIFFRE/DÉCHIFFRE : PETIT PROGRAMME QUI CHIFFRE DES CHAINES. CHIFFRAGE TRÈS SIMP

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 25 janv. 2013 à 14:12
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 25 janv. 2013 à 14:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54911-chiffre-dechiffre-petit-programme-qui-chiffre-des-chaines-chiffrage-tres-simple

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
25 janv. 2013 à 14:18
Bonjour.

L'introduction est claire et bien formulée, et chose rare, les bons termes sont employés (Utilisation correcte du mot "chiffrement" au lieu du néologisme "cryptage").

Néanmoins, cette source présente plusieurs problèmes:
- Un peu légère (au final, si on retire les fonctions de lecture/écriture, il ne reste qu'une seule fonction copié-collée deux fois).
- Des contraintes gênantes (limitation du nombre de caractères)
- Et surtout, un chiffrement qui n'est qu'un dérivé du chiffrement de césar (et très aisément cassable).

Une source est là pour montrer une technique pointue ou originale, montrer la meilleur manière de réaliser quelque chose, et ou présenter des manière pédagogique une notion ou un algorithme.
Cette source ne rentre malheureusement dans aucun des cas.
Il aurait été plus judicieux de poster ton code sur le forum avec comme titre: "Critiquez mon code afin que je m'améliore".
Je vais donc désactiver la source.

Je vais tout de même te donner quelques conseils techniques:
- chiffrer et dechiffrer pourraît être une seule et même fonction. Au final, la seule chose qui change est: "buffer[i] += x; " Tu pourrais très bien faire: "buffer[i] += type * x; " avec type un argument qui vaut 1 ou -1 en fonction de ce que tu veux faire.
- Plus simplement, tu peux aussi faire une fonction bijective (La première application chiffre, et l'appliquer une deuxième fois déchiffre). Un exemple simple est le chiffrement "xor" (C'est un "ou exclusif", représenté par un "^" en C).
- Au niveau de la limitation de caractères: à la lecture du fichier, il te faut agrandir la taille de ton buffer afin de pouvoir contenir tout le fichier. On fait cela avec des fonctions d'allocation (malloc par exemple). Il n'y a pas de raison pour imposer une telle contrainte.
- Lire le fichier caractère par caractère est juste sous optimale. Récupère plutôt morceau par morceau. Tu n'as pas besoin de compter le nombre de caractères et revenir en arrière. Tu lis par bloc et tu recopies ton fichier dans une chaîne. La taille de ta chaîne te donne la taille de ton fichier. De plus, pas besoin de refaire un strlen dans tes fonctions de chiffrement vu que tu connais déjà la taille.
- Les commentaires ne sont pas pertinents. Notamment celui-ci: "int x=X; /* On affecte a x la valeur de X qui est 16 */" Tu indiques dans le commentaire la valeur que tu voulais justement externaliser ! C'est dommage. De plus, une variable avec un nom plus pertinent que X aurait été souhaitable. Je t'invite à lire ceci, pour comprendre comment écrire des commentaires convenables: http://0217021.free.fr/portfolio/axel.berardino/articles/ecrire-de-bons-commentaires
Rejoignez-nous