Introducere
Cifrul vigenere este un algoritm care este folosit pentru criptarea și decriptarea textului. Cifrul vigenere este un algoritm de criptare a unui text alfabetic care folosește o serie de cifruri caesar întrețesute. Se bazează pe literele unui cuvânt cheie. Este un exemplu de cifr de substituție polialfabetică. Acest algoritm este ușor de înțeles și implementat. Acest algoritm a fost descris pentru prima dată în 1553 de Giovan Battista Bellaso . Utilizează un tabel Vigenere sau un pătrat Vigenere pentru criptarea și decriptarea textului. Tabelul vigenere se mai numește și tabula recta.
Două metode realizează cifra vigenere.
Metoda 1
Când este dat tabelul vigenere, criptarea și decriptarea se fac folosind tabelul vigenere (matrice 26 * 26) în această metodă.
Exemplu: textul simplu este „JAVATPOINT”, iar cheia este „BEST”.
Pentru a genera o nouă cheie, cheia dată este repetată într-o manieră circulară, atâta timp cât lungimea textului simplu nu este egală cu noua cheie.
Criptare
șir de listă java
Prima literă a textului simplu este combinată cu prima literă a cheii. Coloana de text simplu „J” și rândul cheii „B” intersectează alfabetul „K” din tabelul vigenere, deci prima literă a textului cifrat este „K”.
În mod similar, a doua literă a textului simplu este combinată cu a doua literă a cheii. Coloana de text simplu „A” și rândul cheii „E” intersectează alfabetul „E” din tabelul vigenere, deci a doua literă a textului cifrat este „E”.
Acest proces continuă continuu până când textul simplu este terminat.
Text cifrat = KENTUTGBOX
Decriptare
Decriptarea se face prin rândul de chei din tabelul vigenere. Mai întâi, selectați rândul literei cheie, găsiți poziția literei de text cifrat în acel rând și apoi selectați eticheta coloanei textului cifrat corespunzător ca text simplu.
De exemplu, în rândul cheii este „B”, iar textul cifrat este „K”, iar această literă de text cifrat apare în coloana „J”, ceea ce înseamnă că prima literă de text simplu este „J”.
Apoi, în rândul cheii este „E”, iar textul cifrat este „E”, iar această literă de text cifrat apare în coloana „A”, ceea ce înseamnă că a doua literă de text simplu este „A”.
șir.conține java
Acest proces continuă continuu până când textul cifrat este terminat.
Text simplu = JAVATPOINT
Metoda 2
Când tabelul vigenere nu este dat, criptarea și decriptarea se fac prin formula algebrică Vigenar în această metodă (conversia literelor (A-Z) în numere (0-25)).
Formula de criptare este,
ȘIi= (Pi+ Ki) împotriva 26Formula de decriptare este,
Di= (Ei- Ki) împotriva 26În orice caz (Di) devine negativă (-ve), în acest caz, vom adăuga 26 în valoarea negativă.
Unde,
E denotă criptarea.
np.histogramă
D indică decriptarea.
P indică textul simplu.
K reprezintă cheia.
Notă: „i” desemnează decalajul numărului i al literelor, așa cum se arată în tabelul de mai jos.
Exemplu: textul simplu este „JAVATPOINT”, iar cheia este „BEST”.
Criptare: ȘIi= (Pi+ Ki) împotriva 26
int la char
Text simplu | J | A | ÎN | A | T | P | O | eu | N | T |
Valoarea textului simplu (P) | 09 | 00 | douăzeci și unu | 00 | 19 | cincisprezece | 14 | 08 | 13 | 19 |
Cheie | B | ȘI | S | T | B | ȘI | S | T | B | ȘI |
Valoarea cheie (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Valoarea textului cifrat (E) | 10 | 04 | 13 | 19 | douăzeci | 19 | 06 | 01 | 14 | 23 |
Text cifrat | K | ȘI | N | T | ÎN | T | G | B | O | X |
Decriptare: Di= (Ei- Ki) împotriva 26
Dacă orice valoare a cazului (Di) devine negativă (-ve), în acest caz, vom adăuga 26 în valoarea negativă. Ca, a treia literă a textului cifrat;
N = 13 și S = 18
Di= (Ei- Ki) împotriva 26
Di= (13 - 18) față de 26
Di= -5 față de 26
Di= (-5 + 26) față de 26
Di= 21
Text cifrat | K | ȘI | N | T | ÎN | T | G | B | O | X |
Valoarea textului cifrat (E) | 10 | 04 | 13 | 19 | douăzeci | 19 | 06 | 01 | 14 | 23 |
Cheie | B | ȘI | S | T | B | ȘI | S | T | B | ȘI |
Valoarea cheie (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Valoarea textului simplu (P) | 09 | 00 | douăzeci și unu | 00 | 19 | cincisprezece | 14 | 08 | 13 | 19 |
Text simplu | J | A | ÎN | A | T | P | O | eu | N | T |
Program:
limbajul C
#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></=>
=>