logo

Vigenerova šifra

Úvod

Šifra vigenere je algoritmus, který se používá k šifrování a dešifrování textu. Šifra vigenere je algoritmus šifrování abecedního textu, který používá řadu propletených caesarových šifer. Je založen na písmenech klíčového slova. Je to příklad polyalfabetické substituční šifry. Tento algoritmus je snadno pochopitelný a implementovatelný. Tento algoritmus byl poprvé popsán v roce 1553 Giovan Battista Bellaso . Pro šifrování a dešifrování textu používá Vigenerovu tabulku nebo Vigenerův čtverec. Vigenere stůl se také nazývá tabula recta.

Vigenerovu šifru provádějí dvě metody.

Metoda 1

Když je uvedena vigenere tabulka, šifrování a dešifrování se provádí pomocí vigenere tabulky (matice 26 * 26) v této metodě.

Vigenerova šifra

Příklad: Otevřený text je 'JAVATPOINT' a klíč je 'BEST'.

Pro vygenerování nového klíče se daný klíč v kruhu opakuje, pokud se délka prostého textu nerovná délce nového klíče.

Vigenerova šifra

Šifrování

třídit haldy

První písmeno otevřeného textu je kombinováno s prvním písmenem klíče. Sloupec prostého textu „J“ a řádek klíče „B“ protíná abecedu „K“ v tabulce vigenere, takže první písmeno šifrového textu je „K“.

Podobně je druhé písmeno otevřeného textu kombinováno s druhým písmenem klíče. Sloupec prostého textu „A“ a řádek klíče „E“ protíná abecedu „E“ v tabulce vigenere, takže druhé písmeno šifrového textu je „E“.

Tento proces pokračuje nepřetržitě, dokud není prostý text dokončen.

Šifrovaný text = KENTUTGBOX

Dešifrování

Dešifrování se provádí pomocí řady klíčů v tabulce vigenere. Nejprve vyberte řádek klíčového písmene, najděte pozici písmena šifrového textu v tomto řádku a poté vyberte označení sloupce odpovídajícího šifrovaného textu jako prostý text.

Vigenerova šifra

Například v řádku klíče je „B“ a šifrový text je „K“ a toto písmeno šifrového textu se objeví ve sloupci „J“, to znamená, že první písmeno otevřeného textu je „J“.

Dále je v řádku klíče „E“ a šifrový text je „E“ a toto písmeno šifrového textu se objeví ve sloupci „A“, to znamená, že druhé písmeno otevřeného textu je „A“.

algoritmus 'prim''

Tento proces pokračuje nepřetržitě, dokud není šifrovaný text dokončen.

Prostý text = JAVATPOINT

Metoda 2

Není-li uvedena vigenere tabulka, šifrování a dešifrování se provádí touto metodou podle Vigenarova algebraického vzorce (převeďte písmena (A-Z) na čísla (0-25)).

Vzorec šifrování je,

Ai= (Pi+ Ki) proti 26

Vzorec dešifrování je,

Di= (Ei- Ki) proti 26

V každém případě (Di) hodnota bude záporná (-ve), v tomto případě k záporné hodnotě přidáme 26.

Kde,

E označuje šifrování.

Java třídí seznam

D označuje dešifrování.

P označuje prostý text.

K označuje klíč.

Poznámka: „i“ označuje posun i-tého čísla písmen, jak je uvedeno v tabulce níže.

Vigenerova šifra

Příklad: Otevřený text je 'JAVATPOINT' a klíč je 'BEST'.

Šifrování: Ai= (Pi+ Ki) proti 26

kat timpf čisté jmění
Prostý text J A V A T P Ó N T
Hodnota prostého textu (P) 09 00 dvacet jedna 00 19 patnáct 14 08 13 19
Klíč B A S T B A S T B A
Hodnota klíče (K) 01 04 18 19 01 04 18 19 01 04
Hodnota šifrovaného textu (E) 10 04 13 19 dvacet 19 06 01 14 23
Šifrovaný text K A N T V T G B Ó X

Dešifrování: Di= (Ei- Ki) proti 26

Pokud se hodnota libovolného případu (Di) stane zápornou (-ve), v tomto případě k záporné hodnotě přidáme 26. Jako třetí písmeno šifrového textu;

N = 13 a S = 18

Di= (Ei- Ki) proti 26

Di= (13 - 18) proti 26

Di= -5 proti 26

Di= (-5 + 26) proti 26

Di= 21

Šifrovaný text K A N T V T G B Ó X
Hodnota šifrovaného textu (E) 10 04 13 19 dvacet 19 06 01 14 23
Klíč B A S T B A S T B A
Hodnota klíče (K) 01 04 18 19 01 04 18 19 01 04
Hodnota prostého textu (P) 09 00 dvacet jedna 00 19 patnáct 14 08 13 19
Prostý text J A V A T P Ó N T

Program:

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