logo

Vigenere Cipher

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.

Vigenere Cipher

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.

Vigenere Cipher

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.

Vigenere Cipher

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 26

Formel for dekryptering er,

Djeg= (Ejeg- Kjeg) mod 26

I 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.

Vigenere Cipher

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(&apos;VIGENERECIPHER&apos;); string original = &apos;I AM INDIAN&apos;; string encrypted = cipher.encrypt(original); string decrypted = cipher.decrypt(encrypted); cout &lt;&lt; original &lt;&lt; endl; cout &lt;&lt; &apos;Encrypted: &apos; &lt;&lt; encrypted &lt;&lt; endl; cout &lt;&lt; &apos;Decrypted: &apos; &lt;&lt; decrypted &lt;&lt; endl; } class Vigenere { public: string key; Vigenere(string key) { for (int i = 0; i = &apos;A&apos; &amp;&amp; key[i] key += key[i]; else if (key[i]&gt;= &apos;a&apos; &amp;&amp; key[i] key += key[i] + &apos;A&apos; - &apos;a&apos;; } } string encrypt(string text) { string out; for (int i = 0, j = 0; i = &apos;a&apos; &amp;&amp; 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></=>