cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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
25 janv. 2013 à 14:18
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