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.