Défi de Brutus

     🖉

Bravo, vous êtes bien sur ma page d’énigmes…

Mais je n’ai aucune confiance en Jules (il va me le payer) et j’ai préféré retirer l’épreuve de cette page.

Mais je vous donne rendez-vous le 7 février 2015 pour relever d’autres défis.


Vous trouverez ci-dessous quelques exemples de codes de résolution du défi de Brutus. Ces solutions documentées ne sont pas forcément optimisées, mais vous donneront un aperçu de la syntaxe et la richesse de chaque langage : langage python 2.x

import sys
from string import *

def CESAR(s, n):
  return translate(s, maketrans(lowercase, lowercase[n:]+lowercase[:n]))

# argument : nom du fichier contenant le cryptogramme
f = open(sys.argv[1], 'r')
BRUTUS = f.read().replace('n','')
f.close()

for DECALAGE in range(26):
  TEXTE = CESAR(BRUTUS, DECALAGE)
  if ("lemotest" in TEXTE):
    print "Le mot de passe est :", TEXTE[TEXTE.find("lemotest"):][8:20]

langage python 3.x

import sys
from string import ascii_lowercase as minltr

def CESAR(s, n):
  return s.translate(str.maketrans(minltr, minltr[n:]+minltr[:n]))

# argument : nom du fichier contenant le cryptogramme
f = open(sys.argv[1], 'r')
BRUTUS = f.read().replace('n','')
f.close()

for DECALAGE in range(26):
  TEXTE = CESAR(BRUTUS, DECALAGE)
  if ("lemotest" in TEXTE):
    print("Le mot de passe est :", TEXTE[TEXTE.find("lemotest"):][8:20])

langage ruby

def cesar(s,dec)
    stro=('a'..'z').to_a.join
    str=stro[dec..25]+stro[0..dec-1]
    s.tr(stro,str)
end

str=ARGF.read()
1.upto(25) {|i|
    str2=cesar(str,i)
    k=str2.index('lemotest')
    puts('Password : '+str2[k+8,12]) if k
    }

langage PHP

<?php
function CESAR($s, $n) {
  $p = "";
  for($i = 0; $i < strlen($s); $i++) {
    $c = ord($s[$i]);
    if(ord('a') <= $c && $c <= ord('z')) {
      $p .= chr(($c - ord('a') + $n) % 26 + ord('a'));
    } else if(ord('A') <= $c && $c <= ord('Z')) {
      $p .= chr(($c - ord('A') + $n) % 26 + ord('A'));
    } else {
      $p .= chr($c);
    }
  }
  return $p;
}

$BRUTUS = implode(file($argv[1], FILE_IGNORE_NEW_LINES));
for($DECALAGE = 0; $DECALAGE < 26; $DECALAGE++) {
  $TEXTE = CESAR($BRUTUS, $DECALAGE);
  if(strpos($TEXTE, "lemotest"))
    echo "Le mot de passe est : ",substr(strstr($TEXTE,"lemotest"),8,12);
}
?>