Décryptage du code de César
Anthrax4012
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
Anthrax4012 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Anthrax4012 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
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 :
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
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:
- Décryptage du code de César
- Code ascii - Guide
- Code de déverrouillage oublié - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages