Introduktion
Vigenere-chifferet er en algoritme, der bruges til at kryptere og dekryptere teksten. Vigenere-chifferet er en algoritme til kryptering af en alfabetisk tekst, der bruger en række sammenvævede cæsar-cifre. Det er baseret på et søgeords bogstaver. Det er et eksempel på en polyalfabetisk substitutionsciffer. Denne algoritme er let at forstå og implementere. Denne algoritme blev først beskrevet i 1553 af Giovan Battista Bellaso . Den bruger en Vigenere-tabel eller Vigenere-firkant til kryptering og dekryptering af teksten. Vigenere-bordet kaldes også tabula recta.
To metoder udfører vigenere-chifferet.
Metode 1
Når vigenere-tabellen er givet, udføres krypteringen og dekrypteringen ved hjælp af vigenere-tabellen (26 * 26 matrix) i denne metode.
Eksempel: Klarteksten er 'JAVATPOINT', og nøglen er 'BEST'.
For at generere en ny nøgle gentages den givne nøgle på en cirkulær måde, så længe længden af den almindelige tekst ikke er lig med den nye nøgle.
Kryptering
borde i latex
Det første bogstav i klarteksten er kombineret med det første bogstav i nøglen. Kolonnen med almindelig tekst 'J' og rækken med nøgle 'B' skærer alfabetet af 'K' i vigenere-tabellen, så det første bogstav i chiffertekst er 'K'.
På samme måde kombineres det andet bogstav i klarteksten med det andet bogstav i nøglen. Kolonnen med almindelig tekst 'A' og rækken med nøgle 'E' skærer alfabetet 'E' i vigenere-tabellen, så det andet bogstav i chiffertekst er 'E'.
Denne proces fortsætter kontinuerligt, indtil klarteksten er færdig.
Chiffertekst = KENTUTGBOX
Dekryptering
sorteringsalgoritmer flette sortering
Dekryptering udføres af rækken af nøgler i vigenere-tabellen. Først skal du vælge rækken af nøglebogstavet, finde chiffertekstbogstavets position i denne række, og derefter vælge kolonneetiketten for den tilsvarende chiffertekst som almindelig tekst.
For eksempel er 'B' i nøglerækken, og chifferteksten er 'K', og dette chiffertekstbogstav vises i kolonnen 'J', hvilket betyder, at det første almindelige bogstav er 'J'.
Dernæst er 'E' i nøglerækken, og chifferteksten er 'E', og dette chiffertekstbogstav vises i kolonnen 'A', hvilket betyder, at det andet almindelige bogstav er 'A'.
Denne proces fortsætter kontinuerligt, indtil chifferteksten er færdig.
Simpel tekst = JAVATPOINT
Metode 2
Når vigenere-tabellen ikke er givet, udføres krypteringen og dekrypteringen af Vigenars algebraiske formel i denne metode (konverter bogstaverne (A-Z) til tallene (0-25)).
Formel for kryptering er,
OGjeg= (Sjeg+ Kjeg) mod 26Formel for dekryptering er,
Djeg= (Ejeg- Kjeg) mod 26I givet fald (Djeg) værdi bliver negativ (-ve), i dette tilfælde vil vi tilføje 26 i den negative værdi.
Hvor,
E angiver krypteringen.
hvordan man initialiserer et array i java
D angiver dekrypteringen.
P betegner klarteksten.
K angiver nøglen.
Bemærk: 'i' angiver forskydningen af det i-tal af bogstaverne, som vist i tabellen nedenfor.
Eksempel: Klarteksten er 'JAVATPOINT', og nøglen er 'BEST'.
Kryptering: OGjeg= (Sjeg+ Kjeg) mod 26
Simpel tekst | J | EN | I | EN | T | P | O | jeg | N | T |
Plaintext-værdi (P) | 09 | 00 | enogtyve | 00 | 19 | femten | 14 | 08 | 13 | 19 |
Nøgle | B | OG | S | T | B | OG | S | T | B | OG |
Nøgleværdi (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Ciphertext-værdi (E) | 10 | 04 | 13 | 19 | tyve | 19 | 06 | 01 | 14 | 23 |
Chiffertekst | K | OG | N | T | I | T | G | B | O | x |
Dekryptering: Djeg= (Ejeg- Kjeg) mod 26
Hvis en værdi for kasus (Di) bliver negativ (-ve), vil vi i dette tilfælde tilføje 26 i den negative værdi. Ligesom det tredje bogstav i chifferteksten;
N = 13 og S = 18
Djeg= (Ejeg- Kjeg) mod 26
Djeg= (13 - 18) mod 26
hvor mange nul for en million
Djeg= -5 mod 26
Djeg= (-5 + 26) mod 26
Djeg= 21
Chiffertekst | K | OG | N | T | I | T | G | B | O | x |
Ciphertext-værdi (E) | 10 | 04 | 13 | 19 | tyve | 19 | 06 | 01 | 14 | 23 |
Nøgle | B | OG | S | T | B | OG | S | T | B | OG |
Nøgleværdi (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Plaintext-værdi (P) | 09 | 00 | enogtyve | 00 | 19 | femten | 14 | 08 | 13 | 19 |
Simpel tekst | J | EN | I | EN | T | P | O | jeg | N | T |
Program:
C sprog
#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></=>
=>