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).
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.
Š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
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 26Formula dešifriranja je,
Di= (Ei- Ki) protiv 26U 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.
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('VIGENERECIPHER'); string original = 'I AM INDIAN'; string encrypted = cipher.encrypt(original); string decrypted = cipher.decrypt(encrypted); cout << original << endl; cout << 'Encrypted: ' << encrypted << endl; cout << 'Decrypted: ' << decrypted << endl; } class Vigenere { public: string key; Vigenere(string key) { for (int i = 0; i = 'A' && key[i] key += key[i]; else if (key[i]>= 'a' && key[i] key += key[i] + 'A' - 'a'; } } string encrypt(string text) { string out; for (int i = 0, j = 0; i = 'a' && 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></=>
=>