Décryptage du code de César

Fermé
Anthrax4012 Messages postés 2 Date d'inscription mercredi 12 août 2015 Statut Membre Dernière intervention 13 août 2015 - 12 août 2015 à 11:28
Anthrax4012 Messages postés 2 Date d'inscription mercredi 12 août 2015 Statut Membre Dernière intervention 13 août 2015 - 13 août 2015 à 21:28
Bonjour à tous,

Je souhaiterais pouvoir décrypter un texte chiffré par décalage, sans en connaitre la valeur.

Voici la méthode que je propose :

- On "découpe" le texte codé lettre par lettre :
"PYTHON" devient : "P" "Y" "T" "H" "O" "N"

- Pour chacune de ces lettres, on enlève une valeur de décalage particulière :

Par exemple, imaginons que nous décalons le mot "PYTHON" de 3 lettres, "PYTHON" devient ainsi "SBWKRQ".

Pour décrypter ce texte, voici comment procéder :
Pour n = 1 :
"S" -> "R"
"B" -> "A"
"W" -> "V"
"K" -> "J"
"R" -> "Q"
"Q" -> "P"

Puis, on recommence la même opération mais en incrémentant n de 1 :
Pour n = 2 :
"S" -> "Q"
"B" -> "Z"

ect... Jusqu'à trouver la bonne solution pour n = 3.

On va alors soustraire le décalage existant entre le texte codé et le texte clair, pour n allant de 0 à 24 (0 et 26 ne jouent aucun rôle dans le décodage du texte).
Bien sûr, il faut afficher le résultat obtenu pour chaque valeur de n !

Voici la fonction que j'ai réussi à coder :
def decodage(texte):
b=0
n=0
e=0
f=0
g=0
while b<len(texte): #On découpe le texte crypté
for n in range (0, 25):
a= texte[b]
d= ord(a)
e= d-n
if 65<e:
f= chr(e)
print(n, a, f.lower())
elif e>90:
g=-90+chr(e)
f=chr(g+65)
elif 65<e and e<90: #Nécessaire pour empêcher l'apparition nouveaux caractères
g=65-e #ord(A)-position du caractère
f=chr(90-g+1) #+1 sinon on a le mauvais décalage
print(n,a,f.lower())
n+=1
b+=1 #On passe à la lettre suivante dans le texte crypté


Le if et les elif servent à éviter l'apparition de nouveaux caractères qui ne seraient pas dans l'alphabet.

Néanmoins, ce programme ne fonctionne pas comme je le voudrais...

1. Pourquoi, une fois que les différents résultats sont affichés par python, n ne va pas jusqu'à 24 pour toutes les lettres ? On remarque que suivant les lettres, n ne prend que certaines valeurs et je n'arrive pas à savoir pourquoi...

2. De plus, e voudrais faire en sorte que les résultats retournés par la fonction soient présentés de manière plus propre, par exemple dans un tableau, afin de pouvoir lire facilement le texte clair pour chacune des valeurs de n, mais je ne sais pas comment faire.

3. Par ailleurs, je sais que le programme présenté plus haut est loin d'être performant et mal codé, donc si vous avez des conseils, n'hésitez pas !

Merci pour votre aide !

Anthrax4012

PS : Je sais qu'il existe d'autres méthodes moins brutales et plus performantes que celle là, comme par exemple celle de l'analyse fréquentielle, mais pour le moment elles ne m'intéressent pas.

Anthrax4012
A voir également:

1 réponse

Lbcg36 Messages postés 378 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 15 décembre 2021 38
12 août 2015 à 11:33
Salut, je peux te conseiller un mec qui s'appelle Jérémy Beddes il s'est connait très bien en python tu peux le recherché sur internet

Voilà ;)
0
Anthrax4012 Messages postés 2 Date d'inscription mercredi 12 août 2015 Statut Membre Dernière intervention 13 août 2015
13 août 2015 à 21:28
Merci Lbcg36, j'ai réussis à trouver ce qui n'allait pas ;)
0