logo

Шифър на Вигенер

Въведение

Шифърът на Vigenere е алгоритъм, който се използва за криптиране и дешифриране на текста. Шифърът на Vigenere е алгоритъм за криптиране на азбучен текст, който използва поредица от преплетени шифри на Цезар. Базира се на букви на ключова дума. Това е пример за полиазбучен заместващ шифър. Този алгоритъм е лесен за разбиране и прилагане. Този алгоритъм е описан за първи път през 1553 г Джован Батиста Беласо . Той използва таблица на Vigenere или квадрат на Vigenere за криптиране и декриптиране на текста. Масата на Vigenere се нарича още tabula recta.

Два метода изпълняват шифъра на Vigenere.

Метод 1

Когато е дадена таблицата на Vigenere, криптирането и дешифрирането се извършват с помощта на таблицата на Vigenere (26 * 26 матрица) в този метод.

Шифър на Вигенер

Пример: Чистият текст е 'JAVATPOINT', а ключът е 'BEST'.

За да се генерира нов ключ, даденият ключ се повтаря в кръг, докато дължината на обикновения текст не е равна на новия ключ.

Шифър на Вигенер

Шифроване

foreach машинопис

Първата буква на открития текст се комбинира с първата буква на ключа. Колоната с обикновен текст 'J' и редът с ключ 'B' пресичат азбуката на 'K' в таблицата на vigenere, така че първата буква на шифрования текст е 'K'.

По същия начин втората буква от отворения текст се комбинира с втората буква от ключа. Колоната с обикновен текст 'A' и редът с ключ 'E' пресичат азбуката на 'E' в таблицата на vigenere, така че втората буква от шифрования текст е 'E'.

Този процес продължава непрекъснато, докато обикновеният текст приключи.

Шифран текст = KENTUTGBOX

Декриптиране

Дешифрирането се извършва от реда от ключове в таблицата на vigenere. Първо изберете реда на ключовата буква, намерете позицията на буквата на шифрования текст в този ред и след това изберете етикета на колоната на съответния шифрован текст като обикновен текст.

Шифър на Вигенер

Например, в реда на ключа е 'B', а шифрованият текст е 'K' и тази буква от шифрован текст се появява в колоната 'J', което означава, че първата буква в обикновен текст е 'J'.

След това в реда на ключа е 'E' и шифрованият текст е 'E' и тази буква от шифрован текст се появява в колоната 'A', което означава, че втората буква в обикновен текст е 'A'.

Този процес продължава непрекъснато, докато шифрованият текст приключи.

Обикновен текст = JAVATPOINT

Метод 2

Когато таблицата на Vigenere не е дадена, криптирането и дешифрирането се извършват чрез алгебрична формула на Vigenar в този метод (преобразувайте буквите (A-Z) в числа (0-25)).

java е нула

Формулата на криптирането е,

Иаз= (Паз+ Каз) срещу 26

Формулата за дешифриране е,

даз= (Еаз- Каз) срещу 26

Ако има такъв случай (Dаз) стойността става отрицателна (-ve), в този случай ще добавим 26 към отрицателната стойност.

Където,

E обозначава криптирането.

char + int в java

D обозначава дешифрирането.

P обозначава открития текст.

K обозначава ключа.

Забележка: 'i' обозначава отместването на i-тия номер на буквите, както е показано в таблицата по-долу.

Шифър на Вигенер

Пример: Чистият текст е 'JAVATPOINT', а ключът е 'BEST'.

Шифроване: Иаз= (Паз+ Каз) срещу 26

Обикновен текст Дж А IN А T П О аз н T
Стойност в обикновен текст (P) 09 00 двадесет и едно 00 19 петнадесет 14 08 13 19
Ключ Б И С T Б И С T Б И
Ключова стойност (K) 01 04 18 19 01 04 18 19 01 04
Стойност на шифрован текст (E) 10 04 13 19 двадесет 19 06 01 14 23
Шифран текст К И н T IN T Ж Б О х

Дешифриране: даз= (Еаз- Каз) срещу 26

Ако някоя стойност (Di) стане отрицателна (-ve), в този случай ще добавим 26 към отрицателната стойност. Например третата буква от шифрования текст;

N = 13 и S = ​​18

изтегляне на youtube с vlc

даз= (Еаз- Каз) срещу 26

даз= (13 - 18) срещу 26

даз= -5 срещу 26

даз= (-5 + 26) срещу 26

даз= 21

Шифран текст К И н T IN T Ж Б О х
Стойност на шифрован текст (E) 10 04 13 19 двадесет 19 06 01 14 23
Ключ Б И С T Б И С T Б И
Ключова стойност (K) 01 04 18 19 01 04 18 19 01 04
Стойност в обикновен текст (P) 09 00 двадесет и едно 00 19 петнадесет 14 08 13 19
Обикновен текст Дж А IN А T П О аз н T

програма:

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></=>