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