Crea un'implementazione del cifrario di Vigenère. Il cifrario di Vigenère è un semplice cifrario a sostituzione.
Un cifrario è un algoritmo usato per cifrare, ovvero codificare, una stringa. La stringa non cifrata si chiama testo in chiaro e la stringa cifrata si chiama testo cifrato. Il passaggio dal testo in chiaro al testo cifrato si chiama codifica, mentre quello inverso si chiama decodifica.
In un cifrario a sostituzione, ogni lettera del testo in chiaro viene sostituita con una lettera del testo cifrato, calcolata con l'aiuto di una chiave. (Nota: è possibile che la lettera di sostituzione sia la stessa della lettera originale.)
In questo cifrario, la chiave è una serie di lettere minuscole, come "abcd".
Ogni lettera del testo in chiaro viene spostata o ruotata di una distanza basata sulla lettera corrispondente della chiave.
Una "a" nella chiave significa uno spostamento di 0 (cioè nessuno spostamento).
Una "b" nella chiave significa uno spostamento di 1.
Una "c" nella chiave significa uno spostamento di 2, e così via.
La prima lettera del testo in chiaro usa la prima lettera della chiave, la seconda lettera del testo in chiaro usa la seconda lettera della chiave, e così via. Se le lettere della chiave finiscono prima di quelle del testo in chiaro, ricomincia dall'inizio della chiave.
Se la chiave contiene una sola lettera, come "dddddd", allora tutte le lettere del testo in chiaro vengono spostate della stessa quantità (tre in questo esempio), il che lo renderebbe uguale a un cifrario a rotazione o a un cifrario a spostamento (a volte chiamato cifrario di Cesare).
Per esempio, il testo in chiaro "iamapandabear" diventerebbe "ldpdsdqgdehdu".
Se la chiave contiene solo la lettera "a" (una o più volte), la distanza dello spostamento è zero e il testo cifrato è uguale al testo in chiaro.
Di solito, però, la chiave è più complicata di così!
Se la chiave è "abcd", allora le lettere del testo in chiaro verrebbero spostate di una distanza di 0, 1, 2 e 3.
Se il testo in chiaro è "hello", ci servono 5 spostamenti, quindi la chiave si ripeterebbe ciclicamente, dando distanze di spostamento di 0, 1, 2, 3 e 0.
Applicando quegli spostamenti alle lettere di "hello" otteniamo "hfnoo".
Se non viene fornita alcuna chiave, genera una chiave composta da almeno 100 lettere minuscole casuali dell'alfabeto latino.
Iscriviti a Exercism per imparare e padroneggiare PHP con 11 concetti122 esercizi e il mentoring di persone reali, tutto gratis.