Introduksjon
Vigenere-chifferet er en algoritme som brukes til å kryptere og dekryptere teksten. Vigenere-chifferet er en algoritme for å kryptere en alfabetisk tekst som bruker en serie sammenvevde caesar-chiffer. Den er basert på et nøkkelords bokstaver. Det er et eksempel på en polyalfabetisk substitusjonssiffer. Denne algoritmen er enkel å forstå og implementere. Denne algoritmen ble først beskrevet i 1553 av Giovan Battista Bellaso . Den bruker en Vigenere-tabell eller Vigenere-firkant for kryptering og dekryptering av teksten. Vigenere-tabellen kalles også tabula recta.
To metoder utfører vigenere-chifferet.
Metode 1
Når vigenere-tabellen er gitt, gjøres krypteringen og dekrypteringen ved å bruke vigenere-tabellen (26 * 26 matrise) i denne metoden.
Eksempel: Klarteksten er 'JAVATPOINT', og nøkkelen er 'BEST'.
For å generere en ny nøkkel, gjentas den gitte nøkkelen på en sirkulær måte, så lenge lengden på ren tekst ikke er lik den nye nøkkelen.
Kryptering
bord i lateks
Den første bokstaven i klarteksten er kombinert med den første bokstaven i nøkkelen. Kolonnen med ren tekst 'J' og rad med nøkkel 'B' skjærer alfabetet til 'K' i vigenere-tabellen, så den første bokstaven i chiffertekst er 'K'.
På samme måte er den andre bokstaven i klarteksten kombinert med den andre bokstaven i nøkkelen. Kolonnen med ren tekst 'A' og rad med nøkkel 'E' krysser alfabetet til 'E' i vigenere-tabellen, så den andre bokstaven i chiffertekst er 'E'.
Denne prosessen fortsetter kontinuerlig til klarteksten er ferdig.
Chiffertekst = KENTUTGBOX
Dekryptering
sorteringsalgoritmer slå sammen sortering
Dekryptering gjøres av nøklerraden i vigenere-tabellen. Velg først raden med nøkkelbokstaven, finn chiffertekstbokstavens plassering i den raden, og velg deretter kolonneetiketten til den tilsvarende chifferteksten som ren tekst.
For eksempel, i raden av nøkkelen er 'B' og chifferteksten er 'K' og denne chiffertekstbokstaven vises i kolonnen 'J', det betyr at den første klartekstbokstaven er 'J'.
Deretter, i raden av nøkkelen er 'E' og chifferteksten er 'E' og denne chiffertekstbokstaven vises i kolonnen 'A', det betyr at den andre klartekstbokstaven er 'A'.
Denne prosessen fortsetter kontinuerlig til chifferteksten er ferdig.
Klartekst = JAVATPOINT
Metode 2
Når vigenere-tabellen ikke er gitt, gjøres krypteringen og dekrypteringen av Vigenar algebraisk formel i denne metoden (konverter bokstavene (A-Z) til tallene (0-25)).
Formel for kryptering er,
OGJeg= (PJeg+ KJeg) mot 26Formel for dekryptering er,
DJeg= (EJeg- KJeg) mot 26Hvis noe tilfelle (DJeg) verdi blir negativ (-ve), i dette tilfellet vil vi legge til 26 i den negative verdien.
Hvor,
E angir krypteringen.
kajal aggarwal
D angir dekrypteringen.
P betegner klarteksten.
K angir nøkkelen.
Merk: 'i' angir forskyvningen av det i-tallet av bokstavene, som vist i tabellen nedenfor.
Eksempel: Klarteksten er 'JAVATPOINT', og nøkkelen er 'BEST'.
Kryptering: OGJeg= (PJeg+ KJeg) mot 26
Klartekst | J | EN | I | EN | T | P | O | Jeg | N | T |
Klartekstverdi (P) | 09 | 00 | tjueen | 00 | 19 | femten | 14 | 08 | 1. 3 | 19 |
Nøkkel | B | OG | S | T | B | OG | S | T | B | OG |
Nøkkelverdi (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Chiffertekstverdi (E) | 10 | 04 | 1. 3 | 19 | tjue | 19 | 06 | 01 | 14 | 23 |
Chiffertekst | K | OG | N | T | I | T | G | B | O | X |
Dekryptering: DJeg= (EJeg- KJeg) mot 26
Hvis noen kasusverdi (Di) blir negativ (-ve), vil vi i dette tilfellet legge til 26 i den negative verdien. Som, den tredje bokstaven i chifferteksten;
N = 13 og S = 18
DJeg= (EJeg- KJeg) mot 26
DJeg= (13 - 18) mot 26
hvis annet bash
DJeg= -5 mot 26
DJeg= (-5 + 26) mot 26
DJeg= 21
Chiffertekst | K | OG | N | T | I | T | G | B | O | X |
Chiffertekstverdi (E) | 10 | 04 | 1. 3 | 19 | tjue | 19 | 06 | 01 | 14 | 23 |
Nøkkel | B | OG | S | T | B | OG | S | T | B | OG |
Nøkkelverdi (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Klartekstverdi (P) | 09 | 00 | tjueen | 00 | 19 | femten | 14 | 08 | 1. 3 | 19 |
Klartekst | J | EN | I | EN | T | P | O | Jeg | 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></=>
=>