Lundi 12/09
Clé Vigenère-Bellaso : clé parfaite tant que la clé est parfaitement aléatoire + aussi longue que le message à chiffré
Retrouvé la taille de la clé
On fait le PGCD (Plus Grand Diviseur Commun) des écarts entre les répétitions
#include <stdio.h> #include <stdlib.h> #include <string.h> // Chiffre un message avec une clef (tout en minuscule) void chiffre(char *message, char *clef) { char decalage = 'a'; for (int i = 0, taille_clef = strlen(clef); *message != '\0'; ++message, ++i) { *message = ((*message - decalage + clef[i % taille_clef] - decalage) % 26) + decalage; } } // Déchiffre un message avec une clef (tout en minuscule) void dechiffre(char *message, char *clef) { char decalage = 'a'; for (int i = 0, taille_clef = strlen(clef); *message != '\0'; ++message, ++i) { *message = (((*message - decalage) - (clef[i % taille_clef] - decalage) + 26) % 26) + decalage; } } int main(int argc, char *argv[]) { if (argc < 3) { fprintf(stderr, "Usage: %s <clef> <message en minuscule et sans espace>\n", argv[0]); return 1; } printf("clef: %s\n", argv[1]); printf("message: %s\n", argv[2]); char message_original[strlen(argv[2])]; strcpy(message_original, argv[2]); chiffre(argv[2], argv[1]); printf("message chiffré: %s\n", argv[2]); dechiffre(argv[2], argv[1]); printf("message déchiffré: %s\n", argv[2]); return 0; }
PRNG: Pseudo RaNdom Generator