logo

Szyfr Vigenere’a

Wstęp

Szyfr Vigenere’a to algorytm służący do szyfrowania i deszyfrowania tekstu. Szyfr Vigenere'a to algorytm szyfrowania tekstu alfabetycznego wykorzystujący serię przeplatających się szyfrów Cezara. Opiera się na literach słów kluczowych. Jest to przykład polialfabetycznego szyfru podstawieniowego. Algorytm ten jest łatwy do zrozumienia i wdrożenia. Algorytm ten został po raz pierwszy opisany w 1553 r Giovana Battisty Bellaso . Do szyfrowania i deszyfrowania tekstu wykorzystuje tablicę Vigenere'a lub kwadrat Vigenere'a. Stół vigenere nazywany jest także tabula recta.

Szyfr Vigenere'a wykonują dwie metody.

Metoda 1

Gdy podana jest tablica Vigenere, w tej metodzie szyfrowanie i deszyfrowanie odbywa się przy użyciu tabeli Vigenere (macierz 26 * 26).

Szyfr Vigenere’a

Przykład: tekst jawny to „JAVATPOINT”, a klucz to „BEST”.

Aby wygenerować nowy klucz, dany klucz powtarza się cyklicznie, o ile długość tekstu jawnego nie jest równa nowemu kluczowi.

Szyfr Vigenere’a

Szyfrowanie

rodzaje testowania oprogramowania

Pierwsza litera tekstu jawnego jest łączona z pierwszą literą klucza. Kolumna zwykłego tekstu „J” i wiersz klucza „B” przecinają alfabet „K” w tablicy vigenere, więc pierwszą literą tekstu zaszyfrowanego jest „K”.

Podobnie druga litera tekstu jawnego jest łączona z drugą literą klucza. Kolumna zwykłego tekstu „A” i wiersz klucza „E” przecinają alfabet „E” w tablicy vigenere, więc drugą literą tekstu zaszyfrowanego jest „E”.

Proces ten jest kontynuowany w sposób ciągły, aż do zakończenia tekstu jawnego.

Zaszyfrowany tekst = KENTUTGBOX

Odszyfrowanie

suma np

Odszyfrowanie odbywa się za pomocą rzędu kluczy w tabeli vigenere. Najpierw wybierz wiersz litery kluczowej, znajdź pozycję litery szyfrogramu w tym wierszu, a następnie wybierz etykietę kolumny odpowiedniego tekstu zaszyfrowanego jako tekst jawny.

Szyfr Vigenere’a

Na przykład w rzędzie klucza znajduje się litera „B”, a szyfrogram to „K”, a ta litera szyfrogramu pojawia się w kolumnie „J”, co oznacza, że ​​pierwszą literą tekstu jawnego jest „J”.

Następnie w rzędzie klucza znajduje się litera „E”, a szyfrogram to „E”, a ta litera szyfrogramu pojawia się w kolumnie „A”, co oznacza, że ​​drugą literą tekstu jawnego jest „A”.

Proces ten trwa nieprzerwanie aż do zakończenia szyfrowania.

Zwykły tekst = JAVATPOINT

Metoda 2

Jeżeli nie jest podana tablica Vigenere'a, szyfrowanie i deszyfrowanie odbywa się za pomocą formuły algebraicznej Vigenara w tej metodzie (zamień litery (A-Z) na liczby (0-25)).

Formuła szyfrowania to:

II= (strI+ KI) przeciwko 26

Formuła deszyfrowania to:

DI= (EI- KI) przeciwko 26

W każdym razie (DI) wartość staje się ujemna (-ve), w tym przypadku dodamy 26 do wartości ujemnej.

Gdzie,

E oznacza szyfrowanie.

wersja Java pod Linuksem

D oznacza deszyfrowanie.

P oznacza tekst jawny.

K oznacza klucz.

Uwaga: „i” oznacza przesunięcie i-tego numeru liter, jak pokazano w poniższej tabeli.

Szyfr Vigenere’a

Przykład: tekst jawny to „JAVATPOINT”, a klucz to „BEST”.

Szyfrowanie: II= (strI+ KI) przeciwko 26

Zwykły tekst J A W A T P O I N T
Wartość w postaci zwykłego tekstu (P) 09 00 dwadzieścia jeden 00 19 piętnaście 14 08 13 19
Klucz B I S T B I S T B I
Kluczowa wartość (K) 01 04 18 19 01 04 18 19 01 04
Wartość szyfrogramu (E) 10 04 13 19 20 19 06 01 14 23
Zaszyfrowany tekst K I N T W T G B O X

Deszyfrowanie: DI= (EI- KI) przeciwko 26

Jeśli w jakimkolwiek przypadku wartość (Di) stanie się ujemna (-ve), w tym przypadku dodamy 26 do wartości ujemnej. Podobnie jak trzecia litera szyfrogramu;

N = 13 i S = 18

DI= (EI- KI) przeciwko 26

DI= (13 - 18) wobec 26

jak pobierać muzykę

DI= -5 wobec 26

DI= (-5 + 26) wobec 26

DI= 21

Zaszyfrowany tekst K I N T W T G B O X
Wartość szyfrogramu (E) 10 04 13 19 20 19 06 01 14 23
Klucz B I S T B I S T B I
Kluczowa wartość (K) 01 04 18 19 01 04 18 19 01 04
Wartość w postaci zwykłego tekstu (P) 09 00 dwadzieścia jeden 00 19 piętnaście 14 08 13 19
Zwykły tekst J A W A T P O I N T

Program:

Język 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></=>