logo

Xifrat de Vigenere

Introducció

El xifratge vigenere és un algorisme que s'utilitza per xifrar i desxifrar el text. El xifratge vigenere és un algorisme de xifrat d'un text alfabètic que utilitza una sèrie de xifres César entrellaçades. Es basa en les lletres d'una paraula clau. És un exemple de xifrat de substitució polialfabètica. Aquest algorisme és fàcil d'entendre i implementar. Aquest algorisme va ser descrit per primera vegada el 1553 per Giovan Battista Bellaso . Utilitza una taula de Vigenere o un quadrat de Vigenere per xifrar i desxifrar el text. La taula vigenere també s'anomena tabula recta.

Dos mètodes realitzen el xifrat vigenere.

Mètode 1

Quan es dóna la taula vigenere, el xifratge i el desxifrat es fan mitjançant la taula vigenere (matriu 26 * 26) en aquest mètode.

Xifrat de Vigenere

Exemple: el text sense format és 'JAVATPOINT' i la clau és 'MILLOR'.

Per generar una nova clau, la clau donada es repeteix d'una manera circular, sempre que la longitud del text pla no sigui igual a la nova clau.

Xifrat de Vigenere

Xifratge

classe abstracta java

La primera lletra del text pla es combina amb la primera lletra de la clau. La columna de text sense format 'J' i la fila de la clau 'B' talla l'alfabet de 'K' a la taula vigenere, de manera que la primera lletra del text xifrat és 'K'.

De la mateixa manera, la segona lletra del text pla es combina amb la segona lletra de la clau. La columna de text sense format 'A' i la fila de la clau 'E' talla l'alfabet de 'E' a la taula vigenere, de manera que la segona lletra del text xifrat és 'E'.

Aquest procés continua contínuament fins que s'acaba el text sense format.

Text xifrat = KENTUTGBOX

Desxifrat

El desxifrat es realitza mitjançant la fila de claus de la taula vigenere. Primer, seleccioneu la fila de la lletra clau, cerqueu la posició de la lletra del text xifrat en aquesta fila i, a continuació, seleccioneu l'etiqueta de la columna del text xifrat corresponent com a text sense format.

Xifrat de Vigenere

Per exemple, a la fila de la clau hi ha 'B' i el text xifrat és 'K' i aquesta lletra de text xifrat apareix a la columna 'J', això significa que la primera lletra de text sense format és 'J'.

vaja conceptes

A continuació, a la fila de la clau hi ha 'E' i el text xifrat és 'E' i aquesta lletra de text xifrat apareix a la columna 'A', això significa que la segona lletra de text sense format és 'A'.

Aquest procés continua contínuament fins que s'acaba el text xifrat.

Text simple = JAVATPOINT

Mètode 2

Quan no es dóna la taula vigenere, el xifratge i el desxifrat es fan mitjançant la fórmula algebraica de Vigenar en aquest mètode (convertiu les lletres (A-Z) en números (0-25)).

La fórmula de xifratge és,

Ii= (Pàgi+ Ki) contra 26

La fórmula de desxifrat és,

Di= (Ei- Ki) contra 26

Si cap cas (Di) es converteix en negatiu (-ve), en aquest cas, afegirem 26 al valor negatiu.

On,

E denota el xifratge.

multithreading java

D indica el desxifrat.

P denota el text pla.

K denota la clau.

Nota: 'i' indica el desplaçament del número i-è de les lletres, tal com es mostra a la taula següent.

Xifrat de Vigenere

Exemple: el text sense format és 'JAVATPOINT' i la clau és 'MILLOR'.

java conté una subcadena

Xifratge: Ii= (Pàgi+ Ki) contra 26

Text simple J A EN A T P O jo N T
Valor de text pla (P) 09 00 21 00 19 15 14 08 13 19
clau B I S T B I S T B I
Valor clau (K) 01 04 18 19 01 04 18 19 01 04
Valor del text xifrat (E) 10 04 13 19 20 19 06 01 14 23
Text xifrat K I N T EN T G B O X

Desxifrat: Di= (Ei- Ki) contra 26

Si algun valor de cas (Di) esdevé negatiu (-ve), en aquest cas, afegirem 26 al valor negatiu. Com, la tercera lletra del text xifrat;

N = 13 i S = 18

Di= (Ei- Ki) contra 26

Di= (13 - 18) contra 26

Di= -5 contra 26

Di= (-5 + 26) contra 26

Di= 21

Text xifrat K I N T EN T G B O X
Valor del text xifrat (E) 10 04 13 19 20 19 06 01 14 23
clau B I S T B I S T B I
Valor clau (K) 01 04 18 19 01 04 18 19 01 04
Valor de text pla (P) 09 00 21 00 19 15 14 08 13 19
Text simple J A EN A T P O jo N T

Programa:

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