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).
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.
Š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.
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 26Formula dešifriranja je,
Djaz= (Ejaz- Kjaz) proti 26V 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.
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('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></=>
=>