logo

Vigenereova šifra

Uvod

Vigenereova šifra je algoritam koji se koristi za šifriranje i dešifriranje teksta. Vigenereova šifra je algoritam za šifriranje abecednog teksta koji koristi niz isprepletenih Cezarovih šifri. Temelji se na slovima ključne riječi. To je primjer polialfabetske supstitucijske šifre. Ovaj algoritam je lako razumjeti i implementirati. Ovaj je algoritam prvi put opisao 1553 Giovan Battista Bellaso . Za šifriranje i dešifriranje teksta koristi Vigenereovu tablicu ili Vigenereov kvadrat. Vigenereova tablica naziva se i tabula recta.

Dvije metode izvode Vigenereovu šifru.

Metoda 1

Kada je dana Vigenereova tablica, šifriranje i dešifriranje se u ovoj metodi obavlja pomoću Vigenereove tablice (matrica 26 * 26).

Vigenereova šifra

Primjer: otvoreni tekst je 'JAVATPOINT', a ključ je 'BEST'.

Za generiranje novog ključa, dani ključ se ponavlja kružno, sve dok duljina običnog teksta nije jednaka novom ključu.

Vigenereova šifra

Šifriranje

prelamanje riječi css

Prvo slovo otvorenog teksta kombinira se s prvim slovom ključa. Stupac običnog teksta 'J' i red ključa 'B' sijeku abecedu 'K' u vigenere tablici, tako da je prvo slovo šifriranog teksta 'K'.

Slično, drugo slovo otvorenog teksta kombinira se s drugim slovom ključa. Stupac običnog teksta 'A' i red ključa 'E' sijeku abecedu 'E' u vigenere tablici, tako da je drugo slovo šifriranog teksta 'E'.

Ovaj se proces kontinuirano nastavlja sve dok se otvoreni tekst ne završi.

Šifrirani tekst = KENTUTGBOX

Dešifriranje

Dešifriranje se vrši redom ključeva u vigenere tablici. Najprije odaberite red ključnog slova, pronađite položaj slova šifriranog teksta u tom retku, a zatim odaberite oznaku stupca odgovarajućeg šifranta kao otvoreni tekst.

vrijednost java niza
Vigenereova šifra

Na primjer, u retku ključa je 'B', a šifrirani tekst je 'K' i ovo slovo šifriranog teksta pojavljuje se u stupcu 'J', što znači da je prvo slovo otvorenog teksta 'J'.

Zatim, u retku ključa je 'E', a šifrirani tekst je 'E' i ovo slovo šifriranog teksta pojavljuje se u stupcu 'A', što znači da je drugo slovo otvorenog teksta 'A'.

Ovaj se proces kontinuirano nastavlja sve dok se šifrirani tekst ne završi.

Čisti tekst = JAVATPOINT

Metoda 2

Kada nije dana Vigenereova tablica, kod ove metode šifriranje i dešifriranje se vrši Vigenarovom algebarskom formulom (pretvorite slova (A-Z) u brojeve (0-25)).

Formula enkripcije je,

Ii= (Pi+ Ki) protiv 26

Formula dešifriranja je,

Di= (Ei- Ki) protiv 26

U svakom slučaju (Di) vrijednost postaje negativna (-ve), u ovom slučaju ćemo dodati 26 negativnoj vrijednosti.

Gdje,

E označava enkripciju.

broj palindroma

D označava dešifriranje.

P označava otvoreni tekst.

K označava ključ.

Napomena: 'i' označava pomak i broja slova, kao što je prikazano u tablici u nastavku.

Vigenereova šifra

Primjer: otvoreni tekst je 'JAVATPOINT', a ključ je 'BEST'.

Enkripcija: Ii= (Pi+ Ki) protiv 26

Čisti tekst J A U A T P O ja N T
Vrijednost otvorenog teksta (P) 09 00 dvadeset i jedan 00 19 petnaest 14 08 13 19
Ključ B I S T B I S T B I
Ključna vrijednost (K) 01 04 18 19 01 04 18 19 01 04
Vrijednost šifriranog teksta (E) 10 04 13 19 dvadeset 19 06 01 14 23
Šifrirani tekst K I N T U T G B O x

Dešifriranje: Di= (Ei- Ki) protiv 26

Ako bilo koja vrijednost slučaja (Di) postane negativna (-ve), u ovom ćemo slučaju dodati 26 negativnoj vrijednosti. Kao, treće slovo šifriranog teksta;

N = 13 i S = 18

Di= (Ei- Ki) protiv 26

Di= (13 - 18) protiv 26

Di= -5 prema 26

niz.sadrži java

Di= (-5 + 26) protiv 26

Di= 21

Šifrirani tekst K I N T U T G B O x
Vrijednost šifriranog teksta (E) 10 04 13 19 dvadeset 19 06 01 14 23
Ključ B I S T B I S T B I
Ključna vrijednost (K) 01 04 18 19 01 04 18 19 01 04
Vrijednost otvorenog teksta (P) 09 00 dvadeset i jedan 00 19 petnaest 14 08 13 19
Čisti tekst J A U A T P O ja N T

Program:

C jezik

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