Vigenere
Shift cipher
Shift cipher polialfabetico. La chiave è un’intera parola, e non più un numero come avveniva in Ceasar.
Esempio
- plaintext: HELLOWORLD
- key: SECRET
S + H -> Z
E + E -> I
C + L -> N
R + L -> C
E + O -> S
T + W -> P
S + O -> G
E + R -> V
C + L -> N
R + D -> U
from itertools import cycle, starmap
def vigenere_encrypt(k, m):
k_it = cycle(k)
return ''.join(starmap(charadd, zip(m, k_it)))
def vigenere_decrypt(k, c):
k_it = cycle(k)
return ''.join(starmap(charadd, zip(c, k_it)))Anche questo può essere rotto da analisi di frequenza, perchè ogni lettera ha una corrispondenza univoca.