Soyez le premier à donner votre avis sur cette source.
Snippet vu 50 629 fois - Téléchargée 32 fois
// code de cesar #include <stdio.h> #include <stdlib.h> // flush void flush() { while( getchar() != '\n' ) continue; } // programme principal int main() { int decalage = 0; char nom_fichier[256]; char choix = 'c'; // choix printf( "Code de Cesar\n" ); printf( "\nSaisir le décalage : " ); scanf( "%d", &decalage ); flush(); printf( "\nSaisir le nom du fichier : " ); scanf( "%s", nom_fichier ); flush(); printf( "\nChiffrement [c] ou déchiffrement [d] : " ); scanf( "%c", &choix ); // synthèse switch( choix ) { case 'c' : printf("\nVous avez demandé le chiffrement du fichier %s avec un décalage de %d.\n", nom_fichier, decalage ); { int index; int taille_fichier = 0; FILE * fichier_avant = NULL; FILE * fichier_apres = NULL; int taille_memoire_tamon = 1024; char * memoire_tampon = NULL; // allocation memoire_tampon = (char*)malloc(taille_memoire_tamon); // mise en mémoire tampon fichier_avant = fopen( nom_fichier, "r" ); taille_fichier = fread( memoire_tampon, 1, taille_memoire_tamon, fichier_avant ); fclose( fichier_avant ); // chiffrement dans le mémoire tampon for( index = 0; index != taille_fichier; ++index ) { // chiffrement des majuscules if( memoire_tampon[ index ] >=65 && memoire_tampon[ index ] < 91 ) memoire_tampon[ index ] = ( ( memoire_tampon[ index ] - 65 ) + decalage ) % 26 + 65; // chiffrement des minuscules if( memoire_tampon[ index ] >=97 && memoire_tampon[ index ] < 123 ) memoire_tampon[ index ] = ( ( memoire_tampon[ index ] - 97 ) + decalage ) % 26 + 97; } // mise a jour du fichier fichier_apres = fopen( nom_fichier, "w" ); fwrite( memoire_tampon, 1, taille_fichier, fichier_apres ); fclose( fichier_apres ); // desallocation free( memoire_tampon); } return 0; case 'd' : printf("\nVous avez demandé le déchiffrement du fichier %s avec un décalage de %d.\n", nom_fichier, decalage ); { int index; int taille_fichier = 0; FILE * fichier_avant = NULL; FILE * fichier_apres = NULL; int taille_memoire_tamon = 1024; char * memoire_tampon = NULL; // allocation memoire_tampon = (char*)malloc(taille_memoire_tamon); // mise en mémoire tampon fichier_avant = fopen( nom_fichier, "r" ); taille_fichier = fread( memoire_tampon, 1, taille_memoire_tamon, fichier_avant ); fclose( fichier_avant ); // déchiffrement dans le mémoire tampon for( index = 0; index != taille_fichier; ++index ) { // déchiffrement des majuscules if( memoire_tampon[ index ] >=65 && memoire_tampon[ index ] < 91 ) memoire_tampon[ index ] = ( ( memoire_tampon[ index ] - 65 ) - decalage ) % 26 + 65; // déchiffrement des minuscules if( memoire_tampon[ index ] >=97 && memoire_tampon[ index ] < 123 ) memoire_tampon[ index ] = ( ( memoire_tampon[ index ] - 97 ) - decalage ) % 26 + 97; } // mise a jour du fichier fichier_apres = fopen( nom_fichier, "w" ); fwrite( memoire_tampon, 1, taille_fichier, fichier_apres ); fclose( fichier_apres ); // desallocation free( memoire_tampon); } return 0; default: return -1; } }
Casser un XOR ou un César à partir du moment ou on sait dire si le texte déchiffré est cohérent, c'est pas plus compliqué mais c'est plus long! lol
Le stade au dessus du César est l' utilisation d'une clé de cryptage et ceci a pour effet sur le code crypté de ne pas présenter de récurrence de caractère. En effet, dans le cas du césar, le A devenant toujours D est identifié par cette corelation définie par le décalage de 3. Or, dans le cas du codage avec une clé, le code ASCII du caractère à convertir n'est pas décalé de 3 mais de la valeur de décalage issue du caractère de même index de la clé. Coder AA en César donne DD. avec une clé de cryptage, AA deviendrait ùp par exemple... D'autant plus puissant et long à casser que la clé est longue. La règle n°1 étant de développer sur une machine non connectée au réseau (sans mail) quel que soit l'algorythme de cryptage.
On peut même demander à l'user si c'est juste (99% des cas : oui), et si cela ne l'est pas, ben il recommence en considérant le deuxième plus présent etc...
Par contre, avec une substitution, il y a beaucoup plus de cas, et l'erreur est vite faite !
Pour casser un cryptage, il faut toujours se trouver derrière, sauf si tu t'amuse à créer un dico et à regarder si la majorité des mots dans le texte cassé est dans ton dico, si c'est le cas c'est bon... Mais c'est long et un peu inutile, il faut avouer...
J'ai un défi plus intéressant : faire de même, mais avec un XOR, ou autre substitution quelconque... Là ça devient marrant !
(Et pour les plus mazo, ya toujours Vigenère ;-P)
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.