logo

Vigenere Cipher

Bevezetés

A vigenere titkosítás egy algoritmus, amelyet a szöveg titkosítására és visszafejtésére használnak. A vigenere titkosítás egy alfabetikus szöveg titkosítására szolgáló algoritmus, amely egy sor összefonódott cézár-rejtjelet használ. Egy kulcsszó betűin alapul. Ez egy példa a többalfabetikus helyettesítési titkosításra. Ez az algoritmus könnyen érthető és végrehajtható. Ezt az algoritmust először 1553-ban írta le Giovan Battista Bellaso . Vigenere táblát vagy Vigenere négyzetet használ a szöveg titkosításához és visszafejtéséhez. A vigenere táblázatot tabula rectának is nevezik.

A vigenere titkosítást két módszer hajtja végre.

1. módszer

A vigenere táblázat megadásakor a titkosítás és a visszafejtés a vigenere táblázat (26 * 26 mátrix) használatával történik ebben a módszerben.

Vigenere Cipher

Példa: Az egyszerű szöveg a 'JAVATPOINT', a kulcs pedig a 'BEST'.

Új kulcs generálásához az adott kulcsot körkörösen megismételjük mindaddig, amíg a sima szöveg hossza nem egyezik meg az új kulccsal.

Vigenere Cipher

Titkosítás

fatérkép

Az egyszerű szöveg első betűje kombinálva van a kulcs első betűjével. A „J” egyszerű szöveg oszlopa és a „B” kulcs sora metszi a „K” ábécéjét a vigenere táblázatban, így a titkosított szöveg első betűje „K”.

Hasonlóképpen, az egyszerű szöveg második betűje kombinálva van a kulcs második betűjével. Az egyszerű szöveg „A” oszlopa és az „E” kulcssor metszi az „E” ábécéjét a vigenere táblázatban, így a titkosított szöveg második betűje „E”.

Ez a folyamat folyamatosan folytatódik, amíg a nyílt szöveg be nem fejeződik.

Rejtjelezett szöveg = KENTUTGBOX

Dekódolás

java tömb lista

A visszafejtést a vigenere tábla kulcssora végzi. Először jelölje ki a kulcsbetű sorát, keresse meg a rejtjelezett szöveg betűjének helyét abban a sorban, majd válassza ki a megfelelő rejtjelezett szöveg oszlopcímkéjét egyszerű szövegként.

Vigenere Cipher

Például a kulcs sorában „B”, a rejtjelezett szöveg pedig „K”, és ez a rejtjelezett betű a „J” oszlopban jelenik meg, ami azt jelenti, hogy az első egyszerű szöveg betűje „J”.

Ezután a kulcs sorában az „E”, a rejtjelezett szöveg pedig „E”, és ez a rejtjelezett betű az „A” oszlopban jelenik meg, ami azt jelenti, hogy a második egyszerű szöveg betűje „A”.

Ez a folyamat folyamatosan folytatódik, amíg a titkosított szöveg be nem fejeződik.

Egyszerű szöveg = JAVATPONT

2. módszer

Ha a vigenere táblázat nincs megadva, a titkosítást és a visszafejtést Vigenar algebrai képletével végzik ebben a módszerben (a betűket (A-Z) számokká alakítják (0-25)).

A titkosítás képlete:

ÉSén= (Pén+ Kén) 26. ellenében

A visszafejtés képlete:

Dén= (Eén- Kén) 26. ellenében

Ha bármilyen eset (Dén) értéke negatív lesz (-ve), ebben az esetben a negatív értékhez 26-ot adunk.

Ahol,

E a titkosítást jelöli.

új sor a pythonban

D a visszafejtést jelöli.

P a nyílt szöveget jelöli.

K a kulcsot jelöli.

Megjegyzés: Az 'i' a betűk i-edik számának eltolását jelöli, amint az az alábbi táblázatban látható.

Vigenere Cipher

Példa: Az egyszerű szöveg a 'JAVATPOINT', a kulcs pedig a 'BEST'.

Titkosítás: ÉSén= (Pén+ Kén) 26. ellenében

Egyszerű szöveg J A BAN BEN A T P O én N T
Egyszerű szöveges érték (P) 09 00 huszonegy 00 19 tizenöt 14 08 13 19
Kulcs B ÉS S T B ÉS S T B ÉS
Kulcsérték (K) 01 04 18 19 01 04 18 19 01 04
Rejtjelezett szöveg érték (E) 10 04 13 19 húsz 19 06 01 14 23
Rejtjelezett szöveg K ÉS N T BAN BEN T G B O x

Dekódolás: Dén= (Eén- Kén) 26. ellenében

Ha bármelyik eset (Di) értéke negatív lesz (-ve), ebben az esetben 26-ot adunk a negatív értékhez. Mint a titkosított szöveg harmadik betűje;

N = 13 és S = 18

Dén= (Eén- Kén) 26. ellenében

Dén= (13 - 18) a 26 ellen

java string isempty

Dén= -5 a 26 ellen

Dén= (-5 + 26) a 26 ellen

Dén= 21

Rejtjelezett szöveg K ÉS N T BAN BEN T G B O x
Rejtjelezett szöveg érték (E) 10 04 13 19 húsz 19 06 01 14 23
Kulcs B ÉS S T B ÉS S T B ÉS
Kulcsérték (K) 01 04 18 19 01 04 18 19 01 04
Egyszerű szöveges érték (P) 09 00 huszonegy 00 19 tizenöt 14 08 13 19
Egyszerű szöveg J A BAN BEN A T P O én N T

Program:

C nyelv

 #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></=>