logo

Cifrul Vigenere

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ă.

Cifrul Vigenere

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.

Cifrul Vigenere

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.

Cifrul Vigenere

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 26

Formula 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.

Cifrul Vigenere

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(&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></=>