Invoering
Het vigenere-cijfer is een algoritme dat wordt gebruikt voor het coderen en decoderen van de tekst. Het vigenere-cijfer is een algoritme voor het coderen van een alfabetische tekst dat gebruik maakt van een reeks met elkaar verweven Caesar-cijfers. Het is gebaseerd op de letters van een trefwoord. Het is een voorbeeld van een polyalfabetisch substitutiecijfer. Dit algoritme is gemakkelijk te begrijpen en te implementeren. Dit algoritme werd voor het eerst beschreven in 1553 door Giovan Battista Bellaso . Het gebruikt een Vigenere-tabel of Vigenere-vierkant voor het coderen en decoderen van de tekst. De vigenere tafel wordt ook wel de tabula recta genoemd.
Er zijn twee methoden die het vigenere-cijfer uitvoeren.
Methode 1
Wanneer de vigenere-tabel wordt gegeven, wordt bij deze methode de codering en decodering uitgevoerd met behulp van de vigenere-tabel (matrix 26 * 26).
Voorbeeld: De leesbare tekst is 'JAVATPOINT' en de sleutel is 'BEST'.
Om een nieuwe sleutel te genereren, wordt de gegeven sleutel cirkelvormig herhaald, zolang de lengte van de platte tekst niet gelijk is aan de nieuwe sleutel.
Encryptie
welke maanden zijn q3
De eerste letter van de leesbare tekst wordt gecombineerd met de eerste letter van de sleutel. De kolom met platte tekst 'J' en de rij met sleutels 'B' kruisen het alfabet van 'K' in de vigeneretabel, dus de eerste letter van de cijfertekst is 'K'.
Op dezelfde manier wordt de tweede letter van de leesbare tekst gecombineerd met de tweede letter van de sleutel. De kolom met platte tekst 'A' en de rij met sleutels 'E' kruisen het alfabet 'E' in de vigeneretabel, dus de tweede letter van de cijfertekst is 'E'.
Dit proces gaat continu door totdat de platte tekst is voltooid.
Cijfertekst = KENTUTGBOX
Decryptie
snaar gesplitste bash
Decodering gebeurt door de rij sleutels in de vigeneretabel. Selecteer eerst de rij met de sleutelletter, zoek de positie van de cijfertekstletter in die rij en selecteer vervolgens het kolomlabel van de overeenkomstige cijfertekst als leesbare tekst.
In de rij van de sleutel staat bijvoorbeeld 'B' en de cijfertekst is 'K' en deze cijfertekstletter verschijnt in de kolom 'J', wat betekent dat de eerste leesbare letter 'J' is.
Vervolgens staat in de rij van de sleutel 'E' en de cijfertekst is 'E' en deze cijfertekstletter verschijnt in de kolom 'A', wat betekent dat de tweede leesbare letter 'A' is.
Dit proces gaat continu door totdat de cijfertekst is voltooid.
Platte tekst = JAVATPOINT
Methode 2
Wanneer de vigenere-tabel niet wordt gegeven, wordt de codering en decodering uitgevoerd door de algebraïsche formule van Vigenar in deze methode (zet de letters (A-Z) om in de cijfers (0-25)).
Formule van encryptie is,
ENi= (Pi+ Ki) tegen 26Formule van decodering is,
Di= (Ei- Ki) tegen 26In ieder geval (Di) waarde wordt negatief (-ve), in dit geval voegen we 26 toe aan de negatieve waarde.
Waar,
E geeft de codering aan.
woordenboek c#
D geeft de decodering aan.
P geeft de leesbare tekst aan.
K geeft de sleutel aan.
Opmerking: 'i' geeft de verschuiving van het i-de getal van de letters aan, zoals weergegeven in de onderstaande tabel.
Voorbeeld: De leesbare tekst is 'JAVATPOINT' en de sleutel is 'BEST'.
Encryptie: ENi= (Pi+ Ki) tegen 26
Platte tekst | J | A | IN | A | T | P | O | I | N | T |
Waarde voor platte tekst (P) | 09 | 00 | eenentwintig | 00 | 19 | vijftien | 14 | 08 | 13 | 19 |
Sleutel | B | EN | S | T | B | EN | S | T | B | EN |
Sleutelwaarde (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Cijfertekstwaarde (E) | 10 | 04 | 13 | 19 | twintig | 19 | 06 | 01 | 14 | 23 |
Cijfertekst | K | EN | N | T | IN | T | G | B | O | X |
Decryptie: Di= (Ei- Ki) tegen 26
Als de (Di)-waarde in een bepaald geval negatief (-ve) wordt, voegen we in dit geval 26 toe aan de negatieve waarde. Zoals de derde letter van de cijfertekst;
N=13 en S=18
Di= (Ei- Ki) tegen 26
Di= (13 - 18) tegen 26
Python schrijft json naar bestand
Di= -5 tegen 26
Di= (-5 + 26) tegen 26
Di= 21
Cijfertekst | K | EN | N | T | IN | T | G | B | O | X |
Cijfertekstwaarde (E) | 10 | 04 | 13 | 19 | twintig | 19 | 06 | 01 | 14 | 23 |
Sleutel | B | EN | S | T | B | EN | S | T | B | EN |
Sleutelwaarde (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Waarde voor platte tekst (P) | 09 | 00 | eenentwintig | 00 | 19 | vijftien | 14 | 08 | 13 | 19 |
Platte tekst | J | A | IN | A | T | P | O | I | N | T |
Programma:
C-taal
#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></=>
=>