Introduktion
Vigenere-chifferet är en algoritm som används för att kryptera och dekryptera texten. Vigenere-chifferet är en algoritm för att kryptera en alfabetisk text som använder en serie sammanvävda caesar-chiffer. Det är baserat på ett nyckelords bokstäver. Det är ett exempel på ett polyalfabetiskt substitutionschiffer. Denna algoritm är lätt att förstå och implementera. Denna algoritm beskrevs första gången 1553 av Giovan Battista Bellaso . Den använder en Vigenere-tabell eller Vigenere-ruta för kryptering och dekryptering av texten. Vigenere-tabellen kallas även tabula recta.
Två metoder utför vigenere-chifferet.
Metod 1
När vigenere-tabellen ges, görs krypteringen och dekrypteringen med hjälp av vigenere-tabellen (26 * 26 matris) i denna metod.
Exempel: Klartexten är 'JAVATPOINT' och nyckeln är 'BÄST'.
För att generera en ny nyckel upprepas den givna nyckeln på ett cirkulärt sätt, så länge som längden på klartexten inte är lika med den nya nyckeln.
Kryptering
java hej-program
Den första bokstaven i klartexten kombineras med den första bokstaven i nyckeln. Kolumnen med ren text 'J' och nyckelraden 'B' skär alfabetet av 'K' i vigenere-tabellen, så den första bokstaven i chiffertext är 'K'.
På samma sätt kombineras den andra bokstaven i klartexten med den andra bokstaven i nyckeln. Kolumnen med vanlig text 'A' och nyckelraden 'E' skär alfabetet 'E' i vigenere-tabellen, så den andra bokstaven i chiffertext är 'E'.
Denna process fortsätter kontinuerligt tills klartexten är klar.
Chiffertext = KENTUTGBOX
Dekryptering
Dekryptering görs av raden med nycklar i vigenere-tabellen. Välj först raden med nyckelbokstaven, hitta chiffertextbokstavens position på den raden och välj sedan kolumnetiketten för motsvarande chiffertext som klartext.
Till exempel, på raden av nyckeln är 'B' och chiffertexten är 'K' och denna chiffertextbokstav visas i kolumnen 'J', det betyder att den första klartextbokstaven är 'J'.
Därefter, i raden av nyckeln är 'E' och chiffertexten är 'E' och denna chiffertextbokstav visas i kolumnen 'A', det betyder att den andra klartextbokstaven är 'A'.
Denna process fortsätter kontinuerligt tills chiffertexten är klar.
ankita dave
Oformatterad text = JAVATPOINT
Metod 2
När vigenere-tabellen inte ges, görs krypteringen och dekrypteringen med Vigenars algebraiska formel i denna metod (konvertera bokstäverna (A-Z) till siffrorna (0-25)).
Formel för kryptering är,
OCHi= (Pi+ Ki) mot 26Formel för dekryptering är,
Di= (Ei-Ki) mot 26Om något fall (Di) värdet blir negativt (-ve), i det här fallet lägger vi till 26 i det negativa värdet.
Var,
E betecknar krypteringen.
java kommentarer
D betecknar dekrypteringen.
P betecknar klartext.
K betecknar nyckeln.
Notera: 'i' anger förskjutningen av bokstävernas i:te nummer, som visas i tabellen nedan.
Exempel: Klartexten är 'JAVATPOINT' och nyckeln är 'BÄST'.
Kryptering: OCHi= (Pi+ Ki) mot 26
Oformatterad text | J | A | I | A | T | P | O | jag | N | T |
Klartextvärde (P) | 09 | 00 | tjugoett | 00 | 19 | femton | 14 | 08 | 13 | 19 |
Nyckel | B | OCH | S | T | B | OCH | S | T | B | OCH |
Nyckelvärde (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Chiffertextvärde (E) | 10 | 04 | 13 | 19 | tjugo | 19 | 06 | 01 | 14 | 23 |
Chiffertext | K | OCH | N | T | I | T | G | B | O | X |
Dekryptering: Di= (Ei-Ki) mot 26
basband vs bredband
Om något värde (Di) blir negativt (-ve), lägger vi i det här fallet till 26 i det negativa värdet. Som den tredje bokstaven i chiffertexten;
N = 13 och S = 18
Di= (Ei-Ki) mot 26
Di= (13 - 18) mot 26
Di= -5 mot 26
Di= (-5 + 26) mot 26
Di= 21
Chiffertext | K | OCH | N | T | I | T | G | B | O | X |
Chiffertextvärde (E) | 10 | 04 | 13 | 19 | tjugo | 19 | 06 | 01 | 14 | 23 |
Nyckel | B | OCH | S | T | B | OCH | S | T | B | OCH |
Nyckelvärde (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Klartextvärde (P) | 09 | 00 | tjugoett | 00 | 19 | femton | 14 | 08 | 13 | 19 |
Oformatterad text | J | A | I | A | T | P | O | jag | N | T |
Program:
C språk
#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></=>
=>