Chiffre de César

Ecrit par Warfo, le 03 Nov 2004 dans la catégorie Cryptographie / Stéganographie

Tout d'abord un peu d'hisoire :

Le code de César est la méthode de cryptographie la plus ancienne communément admise par l'histoire. En effet, l'empereur utilisait cette méthode pour transmettre a ses généraux ses ordres lors des campagnes. Cette méthode est restée inviolée pendant une longue periode, jusqu'à ce que les arabes aient en premier l'idée d'utiliser la technique de l'analyse des fréquences, qui permet de calculer la fréquence d'apparition des lettres dans le message codé. Ainsi, en comparant avec une répartition pré-calculée dans la littérature, on peut décoder le message.
Le chiffre de César fut encore utilisé pendant la guerre de Sécession ainsi que par les armées russes en 1914.

Maintenant, la technique :

Le chiffre de César consiste en une substitution mono-alphabétique, où la substitution est définie par un décalage de lettres. Par exemple, si on remplace A par D, on remplace B par E, C par F, D par G, etc...
Par exemple, décalons les lettres de 3 rangs vers la gauche, comme le faisait Jules César (d'où le nom de ce chiffre) :

Clair A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Chiffré D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Ainsi le message «CHIFFRE DE CESAR» devient FKLIIUH GH FHVDU.

Enfin, décryptons :

La grande faiblesse de ce code réside dans le fait qu'il y a trop peu de clefs possibles : comme il y a 26 lettres dans l'alphabet, il n'y a que 25 décalages intéressants (un décalage de 26 redonne le message initial). Il suffit donc d'essayer tous les décalages pour trouver le bon !
Il est cependant plus simple (et plus malin) d'utiliser l'analyse des fréquences, ou encore d'essayer de deviner ce que pourrait contenir le code.

Petit code :

Pour finir, voici un code de cryptage/décryptage du chiffre de César :


/******************************************
* Name : Crypt/Decrypt César	          *
* Author : Warfo 			  *
* Adress : ftiwarfo@gmail.com 	          *
* Description : Done for noxistes.org 	  *
*******************************************/

#include <stdio.h>
#include <string.h>
#include <conio.h>

char hello[] = "Prog de cryptage/decryptage du code de Cesar par Warfo\n";

void crypt(char *p, int decalage, int choice)
{
  enum {min, maj};
  char casse;

  if (*p >= 'a' && *p <= 'z') casse = min;
  else if (*p >= 'A' && *p <= 'Z') casse = maj;
  else return;

  if (choice == 1) *p = *p + decalage;
  else if (choice == 2) *p = *p - decalage;
  else return;
  
  if (casse == min && *p > 'z' || casse == maj && *p > 'Z' && choice == 1) *p = *p - 26;
  else if (casse == min && *p > 'z' || casse == maj && *p > 'Z' && choice == 2) *p = *p + 26;
  else return;
}

int main()
{
  printf(hello);

  Start:

  char *p, phrase[512];
  int decalage, rep = 0, choice = 0;

  printf("\nTapez 1 pour crypter et 2 pour decrypter.\n");
  scanf("%1i", &choice);

  if (choice == 1)
  {
    printf("\nQuelle phrase voulez-vous crypter ?\n");
    scanf("%512s", &phrase);
    printf("De combien souhaitez-vous decaler les lettres ? ");
    scanf("%2d", &decalage);
  }
  else if (choice == 2)
  {
    printf("\nQuelle phrase voulez-vous decrypter ?\n");
    scanf("%512s", &phrase);
    printf("De combien souhaitez-vous decaler les lettres ? ");
    scanf("%2d", &decalage);
  }
  else return 0;

  if (decalage < 1 || decalage > 26)
  {
    printf("\n%d dans le chiffre de César ?\nNop...", decalage);
    getch();
    return 0;
  }

  p = &phrase[0];
  while (*p) crypt(p++, decalage, choice);

  printf("\nNouvelle phrase : %s\n", phrase);

  printf("\nPour effectuer un nouveau cryptage/decryptage, tapez 1.\n");
  scanf("%1i", &rep);

  if (rep == 1) goto Start;

  else
  {
    printf("\nBye");
    getch();
    return 0;
  }
}

Si vous avez un commentaire à faire à l'auteur de cet article, cliquez ici !