Cifrario di Vigenère¶

Teoria¶

Il cifrario di Vigenère si basa su un semplice cifrario di Cesare. La chiave di esso però cambia per ogni lettera seguendo una stringa (chiave/verme).

Quindi per la prima lettera viene usata la codifica seguendo la prima lettera della chiave, la seconda con la seconda della chiave e così via. Quando la chiave termina viene ripetuta.

Pratica¶

In [13]:
import string
alph = string.ascii_lowercase
verme = 'chiave'
to_crypt = 'segreto da non rivelare'
In [14]:
# calcola lo shift del verme
verme_shift = list()
for lettera in verme:
    index = alph.index(lettera)
    verme_shift.append(index)

print(verme_shift)
[2, 7, 8, 0, 21, 4]
In [15]:
crypted = ''
for i, lettera in enumerate(to_crypt):
    if lettera in alph:
        letter_index = alph.index(lettera)
        shift = verme_shift[i%len(verme)]
        nuova_letter_index = (letter_index + shift)%len(alph)
        nuova_lettera = alph[nuova_letter_index]
        crypted += nuova_lettera
    else:
        crypted += lettera

print(crypted)
ulorzxq la rqu rdzgsirz