logo

Šifra Vigenere

Uvod

Vigenerejeva šifra je algoritem, ki se uporablja za šifriranje in dešifriranje besedila. Vigenerejeva šifra je algoritem za šifriranje abecednega besedila, ki uporablja vrsto prepletenih Cezarjevih šifer. Temelji na črkah ključne besede. Je primer poliabecedne nadomestne šifre. Ta algoritem je enostaven za razumevanje in izvajanje. Ta algoritem je leta 1553 prvič opisal Giovan Battista Bellaso . Za šifriranje in dešifriranje besedila uporablja Vigenerejevo tabelo ali Vigenerejev kvadrat. Vigenerejeva miza se imenuje tudi tabula recta.

Vigenerejevo šifro izvajata dve metodi.

1. metoda

Ko je podana tabela Vigenere, se pri tej metodi šifriranje in dešifriranje izvede z uporabo tabele Vigenere (matrika 26 * 26).

Šifra Vigenere

Primer: golo besedilo je 'JAVATPOINT', ključ pa 'BEST'.

Za generiranje novega ključa se dani ključ ponavlja krožno, dokler dolžina navadnega besedila ni enaka novemu ključu.

Šifra Vigenere

Šifriranje

primer razreda java

Prva črka odprtega besedila je združena s prvo črko ključa. Stolpec navadnega besedila 'J' in vrstica ključa 'B' sekata abecedo 'K' v tabeli vigenere, zato je prva črka šifriranega besedila 'K'.

Podobno je druga črka odprtega besedila združena z drugo črko ključa. Stolpec navadnega besedila 'A' in vrstica ključa 'E' sekata abecedo 'E' v tabeli vigenere, zato je druga črka šifriranega besedila 'E'.

Ta postopek se neprekinjeno nadaljuje, dokler ni odprto besedilo končano.

Šifrirano besedilo = KENTUTGBOX

Dešifriranje

Dešifriranje se izvede z vrsto ključev v tabeli vigenere. Najprej izberite vrstico s ključno črko, poiščite položaj črke šifriranega besedila v tej vrstici in nato izberite oznako stolpca ustreznega šifranta kot odprto besedilo.

Šifra Vigenere

Na primer, v vrstici ključa je 'B' in šifrirano besedilo je 'K' in ta črka šifriranega besedila se pojavi v stolpcu 'J', kar pomeni, da je prva črka odprtega besedila 'J'.

Nato je v vrstici ključa 'E' in šifrirano besedilo je 'E' in ta črka šifriranega besedila se pojavi v stolpcu 'A', kar pomeni, da je druga črka odprtega besedila 'A'.

Ta postopek se nadaljuje, dokler šifrirano besedilo ni končano.

git blagajna

Golo besedilo = JAVATPOINT

Metoda 2

Kadar Vigenerejeva tabela ni podana, se šifriranje in dešifriranje opravi z Vigenarjevo algebraično formulo v tej metodi (pretvorite črke (A-Z) v številke (0-25)).

Formula šifriranja je,

INjaz= (Pjaz+ Kjaz) proti 26

Formula dešifriranja je,

Djaz= (Ejaz- Kjaz) proti 26

V vsakem primeru (Djaz) vrednost postane negativna (-ve), v tem primeru bomo negativni vrednosti dodali 26.

Kje,

E označuje šifriranje.

np oblazinjenje

D označuje dešifriranje.

P označuje odprto besedilo.

K označuje ključ.

Opomba: 'i' označuje odmik i-tega števila črk, kot je prikazano v spodnji tabeli.

Šifra Vigenere

Primer: golo besedilo je 'JAVATPOINT', ključ pa 'BEST'.

Šifriranje: INjaz= (Pjaz+ Kjaz) proti 26

Golo besedilo J A IN A T p O jaz N T
Vrednost navadnega besedila (P) 09 00 enaindvajset 00 19 petnajst 14 08 13 19
Ključ B IN S T B IN S T B IN
Ključna vrednost (K) 01 04 18 19 01 04 18 19 01 04
Vrednost šifriranega besedila (E) 10 04 13 19 dvajset 19 06 01 14 23
Šifrirano besedilo K IN N T IN T G B O X

Dešifriranje: Djaz= (Ejaz- Kjaz) proti 26

dereference kazalec

Če katera koli vrednost primera (Di) postane negativna (-ve), bomo v tem primeru negativni vrednosti dodali 26. Kot tretja črka šifriranega besedila;

N = 13 in S = 18

Djaz= (Ejaz- Kjaz) proti 26

Djaz= (13 - 18) proti 26

Djaz= -5 proti 26

Djaz= (-5 + 26) proti 26

Djaz= 21

Šifrirano besedilo K IN N T IN T G B O X
Vrednost šifriranega besedila (E) 10 04 13 19 dvajset 19 06 01 14 23
Ključ B IN S T B IN S T B IN
Ključna vrednost (K) 01 04 18 19 01 04 18 19 01 04
Vrednost navadnega besedila (P) 09 00 enaindvajset 00 19 petnajst 14 08 13 19
Golo besedilo J A IN A T p O jaz N T

Program:

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