Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 13-12-2016 23:35:03
- ludendo
- Invité
Machine ENIGMA
Bonjour à tous, j'aurais besoins d'aides pour comprendre le fonctionnement d'une machine ENIGMA, je suis en train d'en codé une en python mais mon résultat reste faut:
- lorsque j'essaie de coder à la main avec une feuille de papier, en prenant les 3 premiers rotors dans l'ordre classique, avec le réflecteur B, la positions des 3 anneaux sur A ainsi que le nombres de permutations de lettres sur 0:
-> le message est "PAPA": d'après les simulateurs que j'ai pu trouver en ligne cela donne "LDSG"
-> http://users.telenet.be/d.rijmenants/En … Manual.pdf
-> dans le liens ci-dessus, page 14, il y les changements de lettres en fonction des rotors et du réflecteur
pour le codage de la première lettre:
P --> H - U - K - N - N - T - L ici je trouve bien la bonne lettre, mais c'est pour les suivantes que j'aurais besoins d'aides, Merci d'avance
Ludendo
#2 14-12-2016 10:47:28
- Rossignol
- Membre
- Inscription : 19-06-2015
- Messages : 290
Re : Machine ENIGMA
Bonjour ludendo,
Je ne sais pas si ça peut vous aider, mais avez-vous regardé le module Python Py-Enigma ?
from enigma.machine import EnigmaMachine
machine = EnigmaMachine.from_key_sheet(
rotors='I II III',
reflector='B',
ring_settings=[0, 0, 0],
plugboard_settings='')
machine.set_display('AAA')
print(machine.process_text('PAPA')) # affiche LDSG
Le meilleur simulateur papier d'Enigma que je connaisse est là : Paper_Enigma.
(imprimante couleur recommandée !)
@+
Hors ligne
#3 27-12-2016 06:35:53
- ludendo
- Invité
Re : Machine ENIGMA
Bonjour,
Merci beaucoup Rossignol pour votre réponse...
désespérer par mes tentatives infructueuses d'essayer de comprendre cette machine ENIGMA, j'étais content d'avoir une réponse, et surtout une manière différente de faire avec la Paper_Enigma
J'ai évidemment imprimé en couleurs les constituants de la machine et j'ai essayé avec différente lettre en gardant toujours les rotors I, II et III dans cet ordre là, j'ai gardé aussi le réflecteur B, les rotors démarrent tous à la lettre A (pas de décalage) ainsi qu'aucune permutations de lettre:
lettre à codé -- r_III -- r_II -- r_I -- réfB -- r_I -- r_II -- r_III
A -> B -> J -> Z -> T -> L -> K -> U
P -> E -> S -> S -> F -> D -> C -> G
D -> H -> U -> A -> Y -> O -> Y -> O
Voilà j'ai codé ça avec le Paper_Enigma, je vous ai mis ici le détail car en vérifiant avec un simulateur sur internet je trouve B, L et M
Si vous pouviez essayer vous aussi avec votre Paper_Enigma et me dire, peut etre que je fais pas ca de la bonne manière... je ne sais plus ou chercher...
Merci d'avance
Ludendo
#4 27-12-2016 11:54:23
- Rossignol
- Membre
- Inscription : 19-06-2015
- Messages : 290
Re : Machine ENIGMA
Bonjour,
La machine Enigma étant initialisée comme indiqué précédemment, quand on appuie sur la touche A, le rotor le plus à droite (rotor III) tourne d'un cran : on tourne donc ce rotor d'un cran vers soi comme pour desserrer une vis.
Quand la touche arrive en bout de course, le courant est établi et suit le parcours :
A -> D -> D -> F -> S -> S -> F -> B
Quand on appuie sur la touche P, le rotor de droite tourne encore d'un cran et le parcours du courant électrique est :
P -> W -> P -> H -> D -> G -> T -> H
Même chose quand on appuie sur la touche D :
D -> C -> E -> L -> G -> F -> Z -> J
La chaîne de caractères APD est donc chiffrée par BHJ.
Pour votre simulateur, faites attention au double avancement du rotor du milieu. Voir Wikipedia.
@+
Hors ligne
#5 05-01-2017 12:16:50
- ludendo
- Invité
Re : Machine ENIGMA
Bonjour,
merci pour votre réponse, cela m'a bien aider, mais je comprend par le double avancement du rotor milieu
Pourriez vous m'expliquer comment ca marche étape par étape avec un exemple
Merci d'avance pour votre réponse
Ludendo
#6 06-01-2017 16:56:14
- Rossignol
- Membre
- Inscription : 19-06-2015
- Messages : 290
Re : Machine ENIGMA
Bonjour ludendo,
Il n'est pas facile d'expliquer avec des mots un appareil mécanique comme la machine Enigma.
Je vous conseille de lire la page web suivante, d'examiner les dessins et de regarder la vidéo à la fin : Réplique Enigma
(une autre vidéo sur YouTube )
Un exemple :
On suppose, comme précédemment, les rotors I, II, III dans l'ordre de gauche à droite à la position initiale AAA.
Le rotor III entraîne le II quand il passe de V à W.
Le rotor II entraîne le I quand il passe de E à F.
(l'encoche sur le rotor I n'entraîne rien quand il passe de Q à R car c'est le dernier rotor !)
La séquence obtenue à chaque frappe d'une touche est :
AAA AAB AAC AAD AAE AAF AAG AAH AAI AAJ AAK AAL AAM AAN AAO AAP AAQ AAR AAS AAT AAU AAV
en passant de V à W le rotor III entraîne d'un cran le rotor II :
ABW ABX ABY ABZ ABA ABB ABC ... ABV
Le rotor III passe de V à W donc
ACW ACX ACY ACZ ACA ...
Tout se passe comme pour un compteur kilométrique d'automobile, mais on est modulo 26 au lieu de modulo 10.
C'est quand le rotor II entraîne le I que c'est différent :
... ADM ADN ADO ADP ADQ ADR ADS ADT ADU ADV
Le rotor III passe de V à W : il incrémente le rotor II
AEW
ici on va avoir le double avancement : la came qui est entre les rotors II et I est dans l'encoche correspondant à E.
Quand on appuie sur une touche, la came va monter et pousser le rotor II par son encoche et le rotor I par sa roue à rochet : les deux rotors avancent d'un cran.
On obtient :
BFX BFY BFZ BFA BFB BFC ...
On voit que la séquence attendue
AEX AEY AEZ AEA AEB AEC AED AEE AEF AEG AEH AEI AEJ AEK AEL AEM AEN AEO AEP AEQ AER AES AET AEU AEV BFW
est sautée, on passe directement à BFX
La période de la machine Enigma est donc $26\times 25\times 26 = 16\,900$ et non $26\times 26\times 26 = 17\,576$.
Notez bien que le même phénomène apparait pour les rotors III et II : quand le rotor III entraîne le rotor II il est lui aussi poussé par son encoche, mais comme il est dans le même temps entraîné par sa roue à rochet à chaque frappe de touche, il n'y a aucun effet supplémentaire.
Pour votre programme il faut donc veiller, quand le rotor II est sur sa lettre de "turnover" (E dans l'exemple), à incrémenter les rotors II et I en même temps (pour passer de AEW à BFX dans l'exemple).
Le module Python Py-Enigma permet de vérifier la double avancée :
from enigma.machine import EnigmaMachine
machine = EnigmaMachine.from_key_sheet(
rotors='I II III',
reflector='B',
ring_settings=[0, 0, 0],
plugboard_settings='')
machine.set_display('ADM') # on part de là
for _ in range(20): # 20 premiers résultats demandés
machine.key_press('A') # on appuie sur une touche
print(machine.get_display(), end = ' ') # position des rotors
On obtient : ADN ADO ADP ADQ ADR ADS ADT ADU ADV AEW BFX BFY BFZ BFA BFB BFC BFD BFE BFF BFG
Bon courage et ...
Bonne année 2017 à ceux qui m'ont lu jusque là !
Hors ligne
Pages : 1