Leggendo di Enigma mi e' venuta la voglia di provar a scrivere una versione in Python..rendendomi conto che non e' proprio banale
La prima cosa che ho imparato a mie spese e' che si deve progettare tutto in modo simmetrico perche' la codifica e la successiva decodifica avvengono con le stesse impostazione
In un primo momento avevo usato un array per simulare un rotore ma lo avevo creato inserendo dei valori a caso. Invece per permettere che la decodifica segua lo stesso percorso (all'inverso della codifica) l'array non puo' essere creato a caso ma le posizioni devono essere reciproche...meglio con un esempio...se la posizione 5 dell'array contiene un valore 13 la posizione 13 deve contenere il vaore 5
================================================================================
import numpy as np
import readchar
# a b c d e f g h i j k l m n o p q r s t u v w x y z
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
plugboard = np.array([16,21,11,15,18,25, 9,22,14, 6,20, 2,13,12, 8, 3, 0,23, 4,24,10, 1, 7,17,19, 5])
rotore_1 = np.array([ 6,10,16,25,20,18, 0,23,17,11, 1, 9,15,19,24,12, 2, 8, 5,13, 4,22,21, 7,14, 3])
rotore_2 = np.array([25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
rotore_3 = np.array([17,22,25, 8,16,20,19,14, 3,23,12,24,10,18, 7,21, 4, 0,13, 6, 5,15, 1, 9,11, 2])
riflettore = np.array([24, 5,11,16,21, 1,25,23,10,22, 8, 2,13,12,18,20, 3,19,14,17,15, 4, 9, 7, 0, 6])
while True:
c = readchar.readkey()
print(c),
print(ord(c)-97),
pg = plugboard[ord(c)-97]
print("PG "+str(pg)),
r1 = rotore_1[pg]
print("/R1 "+str(r1)),
r2 = rotore_2[r1]
print("/R2 "+str(r2)),
r3 = rotore_3[r2]
print("/R3 "+str(r3)),
ri = riflettore[r3]
ri_2 = riflettore[ri]
print("/RI "+str(ri)),
print("/RI2 "+str(ri_2)),
r3 = rotore_3[ri_2]
print("/R3 "+str(r3)),
r2 = rotore_2[r3]
print("/R2 "+str(r2)),
r1 = rotore_1[r2]
================================================================================
Questa e' la base con tutti i passaggi nei rotori, nella plugboard e nel riflettore
Il problema e' che il dopo il primo passaggio il primo rotore esegue una rotazione per cambiare in automatico il percorso di criptazione ma al momento non sono riuscito ad utilizzare in modo semplice la rotazione dell'array
giovedì 20 febbraio 2020
Iscriviti a:
Commenti sul post (Atom)
Regressione per illite su suoli naturali
Il dataset visto nel precedente post e' fornito anche da determinazione mineralogiche come la speciazione delle argille. Ho provato a ...
-
Per lo shield WiFly e' stata effettuata la patch descritta qui Per la connessione del lettore Rfid si usano i seguenti pin VCC ...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
Nessun commento:
Posta un commento