LeHack 19 - double cesar
Posted on dim. 07 juillet 2019 in CTF
double cesar
5 Points
Un ami m'a posé un challenge sur IRC. Il a d'après lui créé un algorithme de chiffrement super dur à casser, basé sur deux chiffres de césar d'affilée. Il m'a en effet expliqué que ça a pu être cassé uniquement parce que Jules César n'avait pas pensé à en mettre plusieurs à la suite. Bref, il m'a envoyé ça : "oqemdradftqiuzfdabradf" et m'a dit "vas y tu trouveras pas ce que j'ai mis". Et j'avoue que faire toutes les combinaisons de deux chiffres de césar me paraît trop compliqué. Peux-tu m'aider à cracker son code?
La chaîne à décoder est donc oqemdradftqiuzfdabradf
. Le principe du chiffrement de César est initialement un décalage de 3 lettre :
- A -> D
- B -> E
- C -> F
- ...
Un double chiffrement de César est alors de retrouver le nombre total de décalages réalisés. On peut utiliser ce site. Il permet de décoder via brute force en affichant les décalages de 1 à 25, soit toutes les combinaisons possibles.
Il est également possible de faire via un script Python :
from sys import argv
message = argv[1]
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
letters = 'abcdefghijklmnopqrstuvwxyz'
for key in range(26):
translated = ''
for letter in message:
if letter.isupper():
current_alphabet = LETTERS
else:
current_alphabet = letters
num = current_alphabet.find(letter)
num = num - key
if num < 0:
num = num + len(current_alphabet)
translated += current_alphabet[num]
print('Key %s: %s' % (key, translated))
On peut ensuite appeler notre script avec comme argument le message à décoder :
$ python rot.py oqemdradftqiuzfdabradf
Key 0: oqemdradftqiuzfdabradf
Key 1: npdlcqzcesphtyeczaqzce
[...]
Key 12: cesarforthewintropfort
Key 13: bdrzqenqsgdvhmsqnoenqs
On cherche alors un message cohérent dans l'ensemble des valeurs. On trouve alors la rotation de 12 lettres, ce qui donne comme message décodé : cesarforthewintropfort
.