logo

Vigenere Cipher

Johdanto

Vigenere-salaus on algoritmi, jota käytetään tekstin salaamiseen ja salauksen purkamiseen. Vigenere-salaus on algoritmi, jolla salataan aakkosellinen teksti, joka käyttää sarjaa toisiinsa kudottuja caesar-salauksia. Se perustuu avainsanan kirjaimiin. Se on esimerkki moniaakkosisesta korvaussalauksesta. Tämä algoritmi on helppo ymmärtää ja toteuttaa. Tämän algoritmin kuvaili ensimmäisen kerran vuonna 1553 Giovan Battista Bellaso . Se käyttää Vigenere-taulukkoa tai Vigenere-neliötä tekstin salaukseen ja salauksen purkamiseen. Vigenere-taulukkoa kutsutaan myös tabula rectaksi.

Vigenere-salauksen suorittavat kaksi menetelmää.

Menetelmä 1

Kun vigenere-taulukko on annettu, salaus ja salauksen purku tehdään vigenere-taulukolla (26 * 26 matriisi) tässä menetelmässä.

Vigenere Cipher

Esimerkki: Pelkkä teksti on 'JAVATPOINT' ja avain on 'PARAS'.

Uuden avaimen luomiseksi annettu avain toistetaan ympyrämäisesti, kunhan pelkän tekstin pituus ei ole yhtä suuri kuin uuden avaimen pituus.

Vigenere Cipher

Salaus

java-luettelomerkkijono

Selkeän tekstin ensimmäinen kirjain yhdistetään avaimen ensimmäiseen kirjaimeen. Pelkän tekstin sarake 'J' ja näppäinrivi 'B' leikkaa aakkosten 'K' vigenere-taulukossa, joten salatekstin ensimmäinen kirjain on 'K'.

Vastaavasti selkeän tekstin toinen kirjain yhdistetään avaimen toiseen kirjaimeen. Pelkän tekstin sarake 'A' ja avainrivi 'E' leikkaa 'E'-aakkoset vigenere-taulukossa, joten salatekstin toinen kirjain on 'E'.

Tämä prosessi jatkuu jatkuvasti, kunnes selväteksti on valmis.

Salateksti = KENTUTGBOX

Salauksen purku

Salauksen purku tapahtuu vigenere-taulukon avainrivin avulla. Valitse ensin avainkirjaimen rivi, etsi salatekstin kirjaimen sijainti kyseiseltä riviltä ja valitse sitten vastaavan salatekstin sarakkeen otsikko tavalliseksi tekstiksi.

Vigenere Cipher

Esimerkiksi avaimen rivillä on 'B' ja salateksti on 'K' ja tämä salatekstin kirjain näkyy sarakkeessa 'J', mikä tarkoittaa, että ensimmäinen selkeän tekstin kirjain on 'J'.

esimerkki alimerkkijonosta javassa

Seuraavaksi avaimen rivillä on 'E' ja salateksti on 'E' ja tämä salatekstin kirjain näkyy sarakkeessa 'A', mikä tarkoittaa, että toinen selväkielinen kirjain on 'A'.

Tämä prosessi jatkuu jatkuvasti, kunnes salateksti on valmis.

Selkeä teksti = JAVATPOINT

Menetelmä 2

Kun vigenere-taulukkoa ei ole annettu, salaus ja salauksen purku tehdään Vigenarin algebrallisella kaavalla tässä menetelmässä (muunna kirjaimet (A-Z) numeroiksi (0-25)).

Salauksen kaava on,

JAi= (Pi+ Ki) vastaan ​​26

Salauksen purkukaava on,

Di= (Ei- Ki) vastaan ​​26

Jos tapaus (Di) arvosta tulee negatiivinen (-ve), tässä tapauksessa lisäämme negatiiviseen arvoon 26.

Missä,

E tarkoittaa salausta.

jatkotietotyyppejä

D tarkoittaa salauksen purkamista.

P tarkoittaa selkeää tekstiä.

K tarkoittaa avainta.

Huomautus: 'i' tarkoittaa kirjainten i:nnen numeron siirtymää alla olevan taulukon mukaisesti.

Vigenere Cipher

Esimerkki: Pelkkä teksti on 'JAVATPOINT' ja avain on 'PARAS'.

voi androidilla pelata gamepigeonia

Salaus: JAi= (Pi+ Ki) vastaan ​​26

Selkeä teksti J A SISÄÄN A T P O minä N T
Pelkän tekstin arvo (P) 09 00 kaksikymmentäyksi 00 19 viisitoista 14 08 13 19
Avain B JA S T B JA S T B JA
Avainarvo (K) 01 04 18 19 01 04 18 19 01 04
Salatekstin arvo (E) 10 04 13 19 kaksikymmentä 19 06 01 14 23
Salateksti K JA N T SISÄÄN T G B O X

Salauksen purku: Di= (Ei- Ki) vastaan ​​26

Jos jossakin tapauksessa (Di) arvosta tulee negatiivinen (-ve), tässä tapauksessa lisäämme negatiiviseen arvoon 26. Kuten salatekstin kolmas kirjain;

N = 13 ja S = 18

Di= (Ei- Ki) vastaan ​​26

Di= (13 - 18) vastaan ​​26

Di= -5 vastaan ​​26

Di= (-5 + 26) vastaan ​​26

Di= 21

Salateksti K JA N T SISÄÄN T G B O X
Salatekstin arvo (E) 10 04 13 19 kaksikymmentä 19 06 01 14 23
Avain B JA S T B JA S T B JA
Avainarvo (K) 01 04 18 19 01 04 18 19 01 04
Pelkän tekstin arvo (P) 09 00 kaksikymmentäyksi 00 19 viisitoista 14 08 13 19
Selkeä teksti J A SISÄÄN A T P O minä N T

Ohjelmoida:

C-kieli

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