logo

Шифр Віженера

вступ

Шифр Вігенера — це алгоритм, який використовується для шифрування та дешифрування тексту. Шифр Вігенера — це алгоритм шифрування алфавітного тексту, який використовує серію переплетених шифрів Цезаря. Він заснований на буквах ключового слова. Це приклад поліалфавітного шифру підстановки. Цей алгоритм простий для розуміння та реалізації. Цей алгоритм був вперше описаний в 1553 році Джован Баттіста Белласо . Для шифрування та дешифрування тексту використовується таблиця Віженера або квадрат Віженера. Таблицю Віженера також називають tabula recta.

Два методи виконують шифр Віженера.

Спосіб 1

Коли надається таблиця Віженера, шифрування та дешифрування виконуються за допомогою таблиці Віженера (матриця 26 * 26) у цьому методі.

Шифр Віженера

Приклад: відкритий текст - 'JAVATPOINT', а ключ - 'BEST'.

Щоб створити новий ключ, заданий ключ повторюється циклічно, доки довжина відкритого тексту не дорівнює новому ключу.

Шифр Віженера

Шифрування

c++ розділення рядка

Перша літера відкритого тексту поєднується з першою літерою ключа. Стовпець простого тексту «J» і рядок ключа «B» перетинають алфавіт «K» у таблиці Віженера, тому перша літера зашифрованого тексту — «K».

Подібним чином друга літера відкритого тексту поєднується з другою літерою ключа. Стовпець простого тексту «A» та рядок ключа «E» перетинають алфавіт «E» у таблиці Віженера, тому друга літера зашифрованого тексту є «E».

Цей процес триває безперервно, доки відкритий текст не буде завершено.

Зашифрований текст = KENTUTGBOX

Розшифровка

Розшифровка виконується за допомогою рядка ключів у таблиці Vigenere. Спочатку виберіть рядок ключа, знайдіть позицію літери зашифрованого тексту в цьому рядку, а потім виберіть мітку стовпця відповідного зашифрованого тексту як відкритий текст.

Шифр Віженера

Наприклад, у рядку ключа є 'B', а зашифрований текст - 'K', і ця літера зашифрованого тексту з'являється в стовпці 'J', це означає, що перша літера відкритого тексту - 'J'.

загальна помилка захисту

Далі в рядку ключа є «E», а зашифрований текст — «E», і ця літера зашифрованого тексту з’являється в стовпці «A», це означає, що другою літерою відкритого тексту є «A».

Цей процес триває безперервно, доки не буде закінчено зашифрований текст.

Простий текст = JAVATPOINT

Спосіб 2

Якщо таблицю Віженера не надано, шифрування та дешифрування виконується за алгебраїчною формулою Вігенара в цьому методі (перетворіть літери (A-Z) на цифри (0-25)).

Формула шифрування така:

Іi= (Пi+ Кi) проти 26

Формула дешифрування така:

Дi= (Еi- Кi) проти 26

У будь-якому випадку (Di) значення стає від’ємним (-ve), у цьому випадку ми додамо 26 до від’ємного значення.

Де,

E позначає шифрування.

приклад java lambda

D позначає розшифровку.

P позначає відкритий текст.

K позначає ключ.

Примітка: 'i' позначає зсув i-ї кількості літер, як показано в таблиці нижче.

Шифр Віженера

Приклад: відкритий текст - 'JAVATPOINT', а ключ - 'BEST'.

es5 проти es6

Шифрування: Іi= (Пi+ Кi) проти 26

Простий текст Дж А IN А Т П О я Н Т
Значення відкритого тексту (P) 09 00 двадцять один 00 19 п'ятнадцять 14 08 13 19
ключ Б І С Т Б І С Т Б І
Ключове значення (K) 01 04 18 19 01 04 18 19 01 04
Значення зашифрованого тексту (E) 10 04 13 19 двадцять 19 06 01 14 23
Зашифрований текст К І Н Т IN Т Г Б О X

Розшифровка: Дi= (Еi- Кi) проти 26

Якщо будь-яке значення case (Di) стає від’ємним (-ve), у цьому випадку ми додамо 26 до від’ємного значення. Мовляв, третя літера зашифрованого тексту;

N = 13 і S = 18

Дi= (Еi- Кi) проти 26

Дi= (13 - 18) проти 26

Дi= -5 проти 26

Дi= (-5 + 26) проти 26

Дi= 21

Зашифрований текст К І Н Т IN Т Г Б О X
Значення зашифрованого тексту (E) 10 04 13 19 двадцять 19 06 01 14 23
ключ Б І С Т Б І С Т Б І
Ключове значення (K) 01 04 18 19 01 04 18 19 01 04
Значення відкритого тексту (P) 09 00 двадцять один 00 19 п'ятнадцять 14 08 13 19
Простий текст Дж А IN А Т П О я Н Т

програма:

мова C

 #include #include using namespace std; int main() { Vigenere cipher(&apos;VIGENERECIPHER&apos;); string original = &apos;I AM INDIAN&apos;; string encrypted = cipher.encrypt(original); string decrypted = cipher.decrypt(encrypted); cout &lt;&lt; original &lt;&lt; endl; cout &lt;&lt; &apos;Encrypted: &apos; &lt;&lt; encrypted &lt;&lt; endl; cout &lt;&lt; &apos;Decrypted: &apos; &lt;&lt; decrypted &lt;&lt; endl; } class Vigenere { public: string key; Vigenere(string key) { for (int i = 0; i = &apos;A&apos; &amp;&amp; key[i] key += key[i]; else if (key[i]&gt;= &apos;a&apos; &amp;&amp; key[i] key += key[i] + &apos;A&apos; - &apos;a&apos;; } } string encrypt(string text) { string out; for (int i = 0, j = 0; i = &apos;a&apos; &amp;&amp; c <= 2 26 'z') c +="A" - 'a'; else if (c continue; out key[j] * 'a') % j="(j" 1) key.length(); } return out; string decrypt(string text) { for (int i="0," && <="z" ) 26) }; pre> <p> <strong>Output:</strong> </p> <pre> I AM INDIAN Encrypted: SDERFGTUJ Decrypted: IAMINDIAN </pre> <hr></=>