А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь И видання Е Ю Я
абвгдежзійклмнопрстуфхцчшщьи'еюя бвгдежзійклмнопрстуфхцчшщьи'еюяА вгдежзійклмнопрстуфхцчшщьи'еюяАБ гдежзійклмнопрстуфхцчшщьи'еюяАБВ дежзійклмнопрстуфхцчшщьи'еюяАБВГ ежзійклмнопрстуфхцчшщьи'еюяАБВГД жзійклмнопрстуфхцчшщьи'еюяАБВГДЕ зійклмнопрстуфхцчшщьи'еюяАБВГДЕЖ ійклмнопрстуфхцчшщьи'еюяАБВГДЕЖЗ йклмнопрстуфхцчшщьи'еюяАБВГДЕЖЗІ клмнопрстуфхцчшщьи'еюяАБВГДЕЖЗІЙ лмнопрстуфхцчшщьи'еюяАБВГДЕЖЗІЙК мнопрстуфхцчшщьи'еюяАБВГДЕЖЗІЙКЛ нопрстуфхцчшщьи'еюяАБВГДЕЖЗІЙКЛМ опрстуфхцчшщьи'еюяАБВГДЕЖЗІЙКЛМН прстуфхцчшщь 'еюяАБВГДЕЖЗІЙКЛМНО рстуфхцчшщьи'еюяАБВГДЕЖЗІЙКЛМНОП стуфхцчшщьи'еюяАБВГДЕЖЗІЙКЛМНОПР туфхцчшщьи'еюяАБВГДЕЖЗІЙКЛМНОПРС уфхцчшщьи'еюяАБВГДЕЖЗІЙКЛМНОПРСТ фхцчшщьи'еюяАБВГДЕЖЗІЙКЛМНОПРСТУ хцчшщьи'еюяАБВГДЕЖЗІЙКЛМНОПРСТУФ цчшщьи'еюяАБВГДЕЖЗІЙКЛМНОПРСТУФХ чшщьи'еюяАБВГДЕЖЗІЙКЛМНОПРСТУФХЦ шщьи'еюяАБВГДЕЖЗІЙКЛМНОПРСТУФХЦЧ щьи'еюяАБВГДЕЖЗІЙКЛМНОПРСТУФХЦЧШ ьи'еюяАБВГДЕЖЗІЙКЛМНОПРСТУФХЦЧШЩ и'еюяАБВГДЕЖЗІЙКЛМНОПРСТУФХЦЧШЩЬ'еюяАБВГДЕЖЗІЙКЛМНОПРСТУФХЦЧШЩЬИ еюяАБВГДЕЖЗІЙКЛМНОПРСТУФХЦЧШЩЬИ' юяАБВГДЕЖЗІЙКЛМНОПРСТУФХЦ ЧШЩЬИ'Е яАБВГДЕЖЗІЙКЛМНОПРСТУФХЦЧШЩЬИ'ЕЮ
Зауважу, в загальному випадку таблиця Віженера складається з алфавіту, циклічно зрушеного на один символ вліво, однак можливі й інші перестановки - це на Ваш розсуд. Крім того, перший рядок може являти собою алфавіт, випадковим чином перемішаний.
Процес шифрування виглядає наступним чином. Відкритий текст (який треба зашифрувати, записується в рядок без пробілів. Далі необхідно визначити ключ. Віженер пропонував як ключ використовувати сам відкритий текст, з додаванням до початку ключа символ обраний випадковим чином. Але зауважу що не обов'язково слідувати встановленим правилом творця шифру. В як ключ цілком можливо використовувати і будь-яку іншу послідовність символів, довжиною рівній довжині відкритого тексту.
Після всього зробленого, для отримання шифр-тексту (криптограма) беремо перший символ відкритого тексту в якості покажчика рядка в таблиці Віженера. а що стоїть під ним букву - як стовпці. На перетині цієї пари з таблиці виписуємо символ шифр-тексту. Далі повторюємо ці дії для всіх символів, що залишились. Для прикладу розглянемо шифрування відкритого тексту - "яблучний джем". Як ключ використовуватимемо сам відкритий текст з додаванням в початку випадкового символу - у мене це вийшло "щ". Повторюся що ключ може бути утворений іншим способом, наприклад просто перемішаний випадковим чином відкритий текст - "ляйичнбо жемд". Але ключ повинен бути відомий одержувачу шифру, тобто відома схема перемішування відкритого тексту, для того щоб він міг розшифрувати криптограму. Так, тепер, записуємо відкритий текст в рядок без пробілів, а під нею також записуємо ключ.
Для того, щоб відновити (розшифрувати) відкритий текст, необхідно знати шифр-текст і ключ. Далі беремо першу букву ключа визначаємо відповідний їй стовпець в таблиці Віженера і пробігає по ньому зверху вниз поки не зустрінемо перший символ шифр-тексту. Як тільки зустріли потрібний символ, виписуємо букву вказує на цей рядок - таким чином ми отримуємо перший символ відкритого тексту. Проробляємо ті ж дії для решти символів ключа і шифр-тексту.
Шифр Віженера був незаслужено забутий на довгий час. І багато донині під цим шифром розуміють найпростіший варіант з коротким ключовим словом і з таблицею, що складається зі звичайних алфавітів.
А тепер, розглянемо програмну реалізацію шифру Віженера на Delphi.
Для початку нам необхідно згенерувати саму таблицю Віженера. Для цього
необхідно оголосити наступні глобальні змінні:
Ну а тепер напишемо код генерації таблиці:
Таблиця є і можна сміливо приступати до реалізації процедури шифрування. дивимося:
Так як шифрування реалізовано, значить пора розглянути процедуру розшифровки. дивимося:
Рекомендую для прочитання:
Книга Чарльз Уезерелл, "Етюди для програмістів".