Шифр Виженера - это классический шифр, первоначально разработанный итальянским криптографом Джован Баттиста Беллазо и опубликованный в 1553 году. Он назван в честь более позднего французского криптографа Блеза де Виженера, который разработал более сильный автоключ шифр (шифр, который включает сообщение текста в ключ).
Шифр легко понять и реализовать, но он пережил три столетия попыток его взлома, за что получил прозвище «le chiffre unéchiffrable» или «неразборчивый шифр».
Из Википедии: Шифр Виженера - это метод шифрования буквенного текста с использованием ряда различных шифров Цезаря на основе букв ключевого слова. Это простая форма полиалфавитной замены.
В шифре Цезаря каждая буква алфавита сдвигается на некоторое количество мест; например, в Caesar шифра сдвига 3, Aстал бы D, Bстал бы E, Yстал бы Bи так далее. Шифр Виженера состоит из нескольких последовательных шифров Цезаря с разными значениями сдвига.
Предположим, что клавиша повторяется на протяжении всего текста, символ за символом. Обратите внимание, что в некоторых реализациях клавиша повторяется над символами, только если они являются частью алфавита - в данном случае это не так.
Сдвиг получается путем применения сдвига Цезаря к символу с соответствующим индексом ключа в алфавите.
Визуальное представление:
"my secret code i want to secure" // сообщение"passwordpasswordpasswordpasswor" // ключНапишите класс, который при задании ключа и алфавита можно использовать для кодирования и декодирования из шифра.
Пример
var alphabet = 'abcdefghijklmnopqrstuvwxyz';var key = 'password';//
создает помощник шифра с заменой каждой буквы // соответствующим символом в ключеc.encode('codewars'); // выведет 'rovwsoiv'c.decode('laxxhsj'); // выведет 'waffles'Любой символ, не входящий в алфавит, необходимо оставить как есть. Например (в верхнем регистре):
c.encode('CODEWARS'); // выведет 'CODEWARS'