MagPI 5 Page 23

De Le French MagPi
Aller à : Navigation, rechercher

(début de code)

  • fprintf(filePtr, "Écriture de quelques données... %d, %d, %d\n" , 2, 3, 4);

(fin de code)

Après avoir achevé les accès au fichier, il faut le fermer afin d'enregistrer sur disque toutes les données en cache dans la mémoire.

(début de code)

  • fclose(filePtr); /* Ferme textFile.txt, en vidant les données sur le disque */

(fin de code)

Le programme final d'exemple met en œuvre les concepts qui ont été abordés dans le but de proposer un algorithme de chiffrement simple,


(début de code)

  • #include <stdio. h>
  • int main(int argc, char *argv[] ) {
  • int mask = 163; /* Déclare un entier et lui assigne une valeur inférieure à 256. */
  • char c; /* Déclare un caractère (c'est un octet, valeur maximale 255. ) */
  • FILE *inputFile = 0, *outputFile = 0; /* déclare deux pointeurs de fichier */
  • if(argc! =3) { /* Vérifie le nombre d'arguments */
  • printf(" Usage: %s <input file> <output file>\n" , argv[0] );
  • return 1; /* Signale une erreur */
  • }
  • inputFile = fopen(argv[1] , " r" ); /* Ouvre le fichier souce. */
  • if(! inputFile) return 2; /* Retourne une erreur si le pointeur de fichier est null. */
  • outputFile = fopen(argv[2] , "w" ); /* Ouvre le fichier destination. */
  • if(! outputFile) return 3; /* Retourne une erreur si le pointeur de fichier est null */
  • c = fgetc(inputFile); /* Lit le premier caractère. */
  • while(c ! = EOF) { /* Boucle jusqu'à ce que la fin-de-fichier soit atteinte. */
  • c ^= mask; /* OU exclusif avec le masque. */
  • fputc(c, outputFile); /* Écrit dans le fichier destination. */
  • c = fgetc(inputFile); /* Lit un autre caractère. */
  • }
  • fclose(inputFi le); /* Ferme le fichier source. */
  • fclose(outputFi le); /* Ferme le fichier destination. */
  • return 0; /* Retourne succès au système d'exploitation */
  • }

(fin de code)

Le programme utilise un OU exclusif pour chiffrer et déchiffrer des fichiers. Le OU exclusif est vrai si l'un des deux bits est à 1 et faux si les deux sont à 1 (ou si les deux sont à 0). Par exemple, 2 ^ 3 = 1 en décimal ou en binaire 10 ^ 11 = 01. Tapez dans un fichier texte avec nano puis essayez d'encoder le fichier. Lancez ensuite le programme une nouvelle fois pour le décoder.

Le défi

Améliorez l'algorithme de chiffrement en utilisant un générateur de nombres aléatoires :

(début de code)

  • #include <stdlib. h>
  • int newMask() {
  • int mask = (double)rand()/RAND_MAX*254+1; /* Nombre entre 1 et 255 */
  • return mask;
  • }
  • int main(){
  • srand(1234567); /* Fixe la valeur de la graine une fois pour toutes */
  • int mask = newMask(); /* Récupère un masque différent à chaque utilisation. */
  • return 0;
  • }

(fin de code)

La solution du problème sera donnée la prochaine fois.


Article par W. H. Bell & D. Shepley

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Boîte à outils