1. Cryptanalyse

1.1. Le code de César

Le texte ci dessous a été crypté en utilisant un décalage de lettres (« code de César »). En vous aidant de la page http://lama.univ-savoie.fr/~hyvernat/substitution.php, décryptez le...

(Il faut utiliser l'option « codage de César » de la page...)

R'thi jc vpgh, xa gtcigt spch jc rpué,
ti eadju...

1.2. Substitution lettre à lettre

Un petit calcul

L'instruction pass de Python est une instruction spéciale qui ... ne fait rien.

Estimez la durée d'execution de

for i in range(1000000):  # un million
    pass
for i in range(10000000): # dix millions
    pass
for i in range(100000000): # cents millions
    pass

En sachant qu'il y a 26! = 1*2*3* ... *25 * 26 permutations possibles des vingt-six lettres de l'alphabet, estimez la durée d'éxécution de

from itertools import permutations
from string import ascii_lowercase
for p in permutations(ascii_lowercase):
    pass

Utilisez l'interprète Python pour faire vos calculs...

Qu'en pensez-vous ?

Facile ?

En utilisant la page http://lama.univ-savoie.fr/~hyvernat/substitution.php, décryptez le texte suivant.

Zp ! lml ! i'rev ql brq imqkv, srqlr pmaar !
Ml bmqozxv jxkr...Mp ! Jxrq !...txrl jre ipmere rl emaar...
Rl ozkxzlv nr vml, -bzk rfrabnr, vrlrw :   
Zdkreexh: "Amx, amlexrqk, ex s'zozxe ql vrn lrw
Xn hzqjkzxv eqk-nr-ipzab yqr sr ar n'zabqvzeer !"
Zaxizn: "Azxe xn jmxv vkrabrk jzle omvkr vzeer !
Bmqk tmxkr, hzxvre-omqe hztkxyqrk ql pzlzb !"
Jreikxbvxh: "I'rev ql kmi !...i'rev ql bxi !. . .i'rev ql izb !
Yqr jxe-sr, i'rev ql izb ?...I'rev qlr bélxleqnr !"
Iqkxrqf: "Jr yqmx erkv irvvr mtnmldqr izbeqnr ?
J'éikxvmxkr, amlexrqk, mq jr tmîvr à ixerzqf ?"
Dkzixrqf: "Zxarw-omqe à ir bmxlv nre mxerzqf
Yqr bzvrklrnnrarlv omqe omqe bkémiiqbâvre  
Jr vrljkr ir brkipmxk à nrqk brvxvre bzvvre ?"

Difficile ?

Comme dernier exemple, essayez de décryptez le texte suivant.

inb HqgnwMpf QMwighI JqM Juh thtuwwb Wgnb wugg dF gqg iMnFdFkhI huWg taMF
gqMhg FMg dFongstgFg MppuhdMFh JqgF qg Juh ta uww FdkqgI Juh hguggl ug gqg
cngufouhg gucwgb d hgMMl taMF gqg qgungq-ntk uFl adpfgl ta gqg hgdpf Jqdpq Mtn
WdhdgMn qul wgog cgqdFl qdi gqg Fdkqg cgoMngb dg Juh u odFgI gqdpf adgpg Mo
JMMlI ctwcMth-qgulglI Mo gqg hMng Jqdpq dh fFMJF uh u xAgFuFk wuJbgnbx Lthg
tFlgn gqg qgul Juh u cnMul hdwWgn cuFl Fgunwb uF dFpq upnMhhb xGM Luigh
iMngdignI ibnbPbHbI onMi qdh ondgFlh Mo gqg PbPbQbIx Juh gFknuWgl taMF dgI
Jdgq gqg lugg x1884bx dg Juh lthg htpq u hgdpf uh gqg Mwl-ouhqdMFgl ouidwb
anupgdgdMFgn thgl gM punnb-ldkFdodglI hMwdlI uFl nguhhtndFkb

Le premier à m'envoyer la solution par email (Pierre.Hyvernat@univ-savoie.fr) gagnera un paquet de bonbons !

2. Substitutions de lettres on Python

Programmez une fonction

def substitution(texte, subst, decode=False):
    """Code ou décode le texte en utilisant la substitution.
"substitution" est une chaine contenant les 26 lettres majuscules dans l'ordre où il faut les substituer :
par exemple, pour remplacer 'A' par 'T' et 'B' par 'U', "subst" commencera par "TU...".
"""

Vous pourrez pour ceci utiliser la méthode find qui permet de trouver la position de la première occurrence d'un caractère dans une chaine :

>>> "Salut !".find("S")
0
>>> "Salut !".find("t")
4
>>> "Salut !".find("T")
-1