Le Docteur a besoin d'un cryptanalyste, et c'est à vous qu'il a fait appel.
Il semble que les Cybermen et les Daleks utilisent un nouveau système de chiffrement pour communiquer.
Vous avez pu mettre la main sur la méthode de chiffrement dans un dépôt GitInvaders et vous disposez maintenant
de fonctions de chiffrement écrites en C
:
#include <string.h>
#include <assert.h>
#define BLKSIZE1 5
#define BLKSIZE2 5
#define MODULE 33554432L
char alp[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ. ,:!?";
int pgcd(unsigned long int a, unsigned long int b) {
if (b == 0) return a;
return pgcd(b, a % b);
}
int letter_num(char c) {
switch(c) {
case '.': return 26;
case ' ': return 27;
case ',': return 28;
case ':': return 29;
case '!': return 30;
case '?': return 31;
default: return c - 65;
}
}
char num_letter(int n) {
return alp[n];
}
void crypt1_blk(char blk[], char key[], char res[]) {
for (int i = 0; i < BLKSIZE1; i++) {
res[i] = num_letter(letter_num(blk[i]) ^ letter_num(key[i]));
}
}
void crypt2_blk(char blk[], unsigned long int key, char res[]) {
unsigned long int n = 0;
for (int i = 0; i < BLKSIZE2; i++) {
n = n * 32 + letter_num(blk[i]);
}
n = (n * key) % MODULE;
for (int i = BLKSIZE2 - 1; i >=0; i--) {
res[i] = num_letter(n % 32);
n = n / 32;
}
}
void crypt(char message[], char key1[], int key2, char res[]) {
assert (strlen(message) % (BLKSIZE1 * BLKSIZE2 / pgcd(BLKSIZE1, BLKSIZE2)) == 0);
assert (pgcd(key2, MODULE) == 1);
assert (strlen(key1) == BLKSIZE1);
assert (key2 >= 0 && key2 < MODULE);
for (int i=0; i<strlen(message); i += BLKSIZE1) {
crypt1_blk(&message[i], key1, &res[i]);
}
for (int i=0; i<strlen(message); i += BLKSIZE2) {
crypt2_blk(&res[i], key2, &res[i]);
}
}
Les Daleks et les Cybermen ont certainement une paire de clés communes (key1
et key2
du code C) et chiffrent leurs messages
avec ces clés.
Le Tardis a aussi pu intercepter deux messages :
:RMOP,DOCC,QTUY,QMHWVA L DCUUGYMHN QUQXWK!KJGL?FRD EL,OJQMOXUIYSDOBMQF
MA.AYTBUAY
Il y a fort à parier que la dernière réponse des Daleks est : EXTERMINER
Serez-vous capable de décrypter le message et d'informer le Docteur du plan machiavélique qui se trame ?
Validez le défi avec le message des Cybermen.