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ä.
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.
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.
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 26Salauksen purkukaava on,
Di= (Ei- Ki) vastaan 26Jos 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.
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('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></=>
=>