Cifrario di Provenzano

Articolo approfondimento del di

Info: In fondo alla pagina è disponibile il link del codice sorgente completo.

La crittografia si occupa di tutte le tecniche necessarie per criptare e nascondere un messaggio. Con la nascita dell'informatica moderna questa branca scientifica ha assunto un'importanza molto ampia.

Il primo cifrario del quale si ha traccia, è quello di Giulio Cesare, esso consisteva nel sostituire le lettere dell'alfabeto con altre lettere, spostandole semplicemente di 3 lettere in avanti: ad esempio la lettera "A" corrispondeva a D la "B"ad "E".

Tramite i linguaggi di programmazione è possibile costruire cifrari di diversa complessità in grado di criptare i messaggi.

Con Python scriveremo un metodo utilizzato da Bernardo Provenzano spietato criminale italiano, che era solito cifrare i suoi messaggi in una maniera molto rudimentale.

L'importanza di cifrare i messaggi permettevano a Provenzano di dialogare con altri mafiosi senza essere intercettato da nessuno, o perlomeno così pensava, in quanto la codifica utilizzata era piuttosto semplice.

Provenzano quando scriveva i suoi messaggi associava ad ogni lettera il numero in cui compariva nell'alfabeto, sommandoci 3.

In questo modo la lettera "A" corrispondeva a 4 (1+3), la lettera "B" a 5 (2+3) e così via per tutte le lettere dell'alfabeto.

L'aggiunta della quantità 3, oltre ad aumentare leggermente la complessità della cifratura, permetteva di non confondersi con le lettere che occupavano le posizioni con due cifre. Infatti quando si incontra il valore "12" o "15", si capiva subito che essendoci l'uno davanti, quelle due cifre andavano tradotte insieme e che rappresentavano un'unica lettera

Nel programma che andremo a scrivere si dovrà tenere conto di questa particolarità.

Prima di tutto inizializziamo la funzione

def provenzano(messaggio):

Per questione di praticità trasformiamo tutto il testo in entrata in maiuscolo o minuscolo (in questo caso ho optato per il maiuscolo)

messaggio = messaggio.upper()

inseriamo in una lista tutte le lettere dell'alfabeto, la loro posizione nell'alfabeto è uguale alla posizione della lista aggiungendo +1.

alfabeto=["A","B","C","D","E","F","G","H","I","L","M","N","O","P","Q","R","S","T","U","V","Z"]

Ora tramite un ciclo for, prenderemo ogni lettera del messaggio da cifrare e lo "tradurremo" in un numero.

for i in messaggio: #inizializzazione del for

if i in alfabeto: #se il valore trovato fa parte dell'alfabeto si esegue la funzione successiva, altrimenti si passa ad else, questo controllo viene effettuato nel caso ci siano valori sconosciuti o spazi.

messaggiocifrato=messaggiocifrato + str(alfabeto.index(i) +4) #si comincia a comporre il messaggio cifrato, la cifra che traduce la lettera viene presa dalla posizione delle lettera nell'alfabeto, che si ottiene sommando +1 alla posizione della lettera nella lista (perchè le liste iniziano da zero e non da uno) e sommando +3, in quanto il cifrario di Provenzano, prendeva la posizione e sommava tre.

Else: #se il valore trovato non è presente nell'alfabeto crea automaticamente uno spazio nel messaggio

messaggiocifrato=messaggiocifrato + " "

return messaggiocifrato #ritorna il valore del messaggio cifrato

Dando impasto al programma questo input:

print provenzano("Binnu Riina")

Si otterrà:

581915419716 171916238152441516

Ora sarebbe divertente ed utile creare una funzione in grado di decriptare questa sequenza di numeri restituendoci il valore originale. Il processo è leggermente più complesso in quanto si dovrà far attenzione ai numeri doppi.

Tra qualche settimana sarà pubblicata la soluzione.

Immagini correlate