logo

Vigenerova šifra

Úvod

Vigenerova šifra je algoritmus, ktorý sa používa na šifrovanie a dešifrovanie textu. Vigenerova šifra je algoritmus na šifrovanie abecedného textu, ktorý používa sériu prepletených cézarových šifier. Je založená na písmenách kľúčového slova. Je to príklad polyalfabetickej substitučnej šifry. Tento algoritmus je ľahko pochopiteľný a implementovateľný. Tento algoritmus bol prvýkrát opísaný v roku 1553 Giovan Battista Bellaso . Na šifrovanie a dešifrovanie textu používa Vigenerovu tabuľku alebo Vigenerov štvorec. Vigenerský stôl sa nazýva aj tabula recta.

Vigenerovu šifru vykonávajú dve metódy.

Metóda 1

Keď je uvedená tabuľka vigenere, šifrovanie a dešifrovanie sa pri tejto metóde vykoná pomocou tabuľky vigenere (matica 26 * 26).

Vigenerova šifra

Príklad: Čistý text je 'JAVATPOINT' a kľúč je 'BEST'.

Na vygenerovanie nového kľúča sa daný kľúč opakuje kruhovým spôsobom, pokiaľ sa dĺžka obyčajného textu nerovná dĺžke nového kľúča.

Vigenerova šifra

Šifrovanie

np.linspace

Prvé písmeno otvoreného textu sa kombinuje s prvým písmenom kľúča. Stĺpec obyčajného textu „J“ a riadok kľúča „B“ pretínajú abecedu „K“ v tabuľke vigenere, takže prvé písmeno šifrového textu je „K“.

Podobne je druhé písmeno otvoreného textu kombinované s druhým písmenom kľúča. Stĺpec obyčajného textu „A“ a riadok kľúča „E“ pretínajú abecedu „E“ v tabuľke vigenere, takže druhé písmeno šifrového textu je „E“.

Tento proces pokračuje nepretržite, kým sa nedokončí čistý text.

Šifrovaný text = KENTUTGBOX

Dešifrovanie

pridanie java do poľa

Dešifrovanie sa vykonáva riadkom kľúčov v tabuľke vigenere. Najprv vyberte riadok kľúčového písmena, nájdite pozíciu písmena šifrového textu v tomto riadku a potom vyberte označenie stĺpca zodpovedajúceho šifrovaného textu ako otvorený text.

Vigenerova šifra

Napríklad v riadku kľúča je „B“ a šifrový text je „K“ a toto písmeno šifrového textu sa zobrazuje v stĺpci „J“, čo znamená, že prvé písmeno otvoreného textu je „J“.

Ďalej, v riadku kľúča je „E“ a šifrový text je „E“ a toto písmeno šifrového textu sa objaví v stĺpci „A“, to znamená, že druhé písmeno otvoreného textu je „A“.

Tento proces pokračuje nepretržite, kým sa šifrovaný text nedokončí.

Obyčajný text = JAVATPOINT

Metóda 2

Ak nie je uvedená vigenerova tabuľka, šifrovanie a dešifrovanie sa vykonáva pomocou Vigenarovej algebraickej formuly v tejto metóde (premeňte písmená (A-Z) na čísla (0-25)).

Vzorec šifrovania je,

Ai= (Pi+ Ki) proti 26

Vzorec dešifrovania je,

Di= (Ei- Ki) proti 26

V každom prípade (Di) hodnota bude záporná (-ve), v tomto prípade k zápornej hodnote pripočítame 26.

Kde,

E označuje šifrovanie.

enkapsulačný program

D označuje dešifrovanie.

P označuje otvorený text.

K označuje kľúč.

Poznámka: „i“ označuje posun i-tého čísla písmen, ako je uvedené v tabuľke nižšie.

Vigenerova šifra

Príklad: Čistý text je 'JAVATPOINT' a kľúč je 'BEST'.

Šifrovanie: Ai= (Pi+ Ki) proti 26

Obyčajný text J A V A T P O ja N T
Hodnota otvoreného textu (P) 09 00 dvadsaťjeden 00 19 pätnásť 14 08 13 19
kľúč B A S T B A S T B A
Hodnota kľúča (K) 01 04 18 19 01 04 18 19 01 04
Hodnota šifrového textu (E) 10 04 13 19 dvadsať 19 06 01 14 23
Šifrovaný text K A N T IN T G B O X

Dešifrovanie: Di= (Ei- Ki) proti 26

Ak sa hodnota akéhokoľvek prípadu (Di) stane zápornou (-ve), v tomto prípade k zápornej hodnote pripočítame 26. Napríklad tretie písmeno šifrového textu;

N = 13 a S = 18

Di= (Ei- Ki) proti 26

Di= (13 - 18) proti 26

zoznamy v jazyku Java

Di= -5 proti 26

Di= (-5 + 26) proti 26

Di= 21

Šifrovaný text K A N T IN T G B O X
Hodnota šifrového textu (E) 10 04 13 19 dvadsať 19 06 01 14 23
kľúč B A S T B A S T B A
Hodnota kľúča (K) 01 04 18 19 01 04 18 19 01 04
Hodnota otvoreného textu (P) 09 00 dvadsaťjeden 00 19 pätnásť 14 08 13 19
Obyčajný text J A V A T P O ja N T

Program:

jazyk C

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