introduzione
Il cifrario vigenere è un algoritmo utilizzato per crittografare e decrittografare il testo. Il cifrario vigenere è un algoritmo di cifratura di un testo alfabetico che utilizza una serie di cifrari di Cesare intrecciati. Si basa sulle lettere di una parola chiave. È un esempio di cifrario a sostituzione polialfabetica. Questo algoritmo è facile da comprendere e implementare. Questo algoritmo fu descritto per la prima volta nel 1553 da Giovan Battista Bellaso . Utilizza una tabella Vigenere o un quadrato Vigenere per la crittografia e la decrittografia del testo. La tavola vigenere è detta anche tabula recta.
Due metodi eseguono la cifratura di Vigenere.
Metodo 1
Quando viene fornita la tabella vigenere, la crittografia e la decrittografia vengono eseguite utilizzando la tabella vigenere (matrice 26 * 26) in questo metodo.
Esempio: il testo in chiaro è 'JAVATPOINT' e la chiave è 'BEST'.
Per generare una nuova chiave, la chiave data viene ripetuta in modo circolare, purché la lunghezza del testo in chiaro non sia uguale alla nuova chiave.
Crittografia
algoritmo di ricerca binaria
La prima lettera del testo in chiaro viene combinata con la prima lettera della chiave. La colonna di testo semplice 'J' e la riga della chiave 'B' intersecano l'alfabeto 'K' nella tabella vigenere, quindi la prima lettera del testo cifrato è 'K'.
Allo stesso modo, la seconda lettera del testo in chiaro viene combinata con la seconda lettera della chiave. La colonna di testo semplice 'A' e la riga della chiave 'E' intersecano l'alfabeto 'E' nella tabella vigenere, quindi la seconda lettera del testo cifrato è 'E'.
Questo processo continua continuamente fino al completamento del testo in chiaro.
Testo cifrato = KENTUTGBOX
Decrittazione
La decrittazione viene eseguita dalla riga di chiavi nella tabella vigenere. Innanzitutto, seleziona la riga della lettera chiave, trova la posizione della lettera del testo cifrato in quella riga, quindi seleziona l'etichetta della colonna del testo cifrato corrispondente come testo in chiaro.
Ad esempio, nella riga della chiave c'è 'B' e il testo cifrato è 'K' e questa lettera del testo cifrato appare nella colonna 'J', ciò significa che la prima lettera del testo in chiaro è 'J'.
Successivamente, nella riga della chiave c'è 'E' e il testo cifrato è 'E' e questa lettera del testo cifrato appare nella colonna 'A', ciò significa che la seconda lettera del testo in chiaro è 'A'.
Questo processo continua continuamente fino al completamento del testo cifrato.
Testo in chiaro = PUNTO JAVAPT
Metodo 2
Quando la tabella vigenere non viene fornita, la crittografia e la decrittografia vengono eseguite dalla formula algebrica di Vigenar in questo metodo (convertire le lettere (A-Z) nei numeri (0-25)).
stati uniti quante città
La formula di crittografia è,
Eio= (Pio+Kio) contro 26La formula di decrittazione è,
Dio= (Eio- Kio) contro 26In ogni caso (Dio) diventa negativo (-ve), in questo caso aggiungeremo 26 nel valore negativo.
Dove,
E denota la crittografia.
jquery al clic
D denota la decrittazione.
P denota il testo in chiaro.
K denota la chiave.
Nota: 'i' indica l'offset dell'i-esimo numero delle lettere, come mostrato nella tabella seguente.
Esempio: il testo in chiaro è 'JAVATPOINT' e la chiave è 'BEST'.
Crittografia: Eio= (Pio+Kio) contro 26
Testo in chiaro | J | UN | IN | UN | T | P | O | IO | N | T |
Valore del testo in chiaro (P) | 09 | 00 | ventuno | 00 | 19 | quindici | 14 | 08 | 13 | 19 |
Chiave | B | E | S | T | B | E | S | T | B | E |
Valore chiave (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Valore del testo cifrato (E) | 10 | 04 | 13 | 19 | venti | 19 | 06 | 01 | 14 | 23 |
Testo cifrato | K | E | N | T | IN | T | G | B | O | X |
Decifrazione: Dio= (Eio- Kio) contro 26
Se in ogni caso il valore (Di) diventa negativo (-ve), in questo caso aggiungeremo 26 al valore negativo. Ad esempio, la terza lettera del testo cifrato;
N = 13 e S = 18
modificare il file linux
Dio= (Eio- Kio) contro 26
Dio= (13 - 18) contro 26
Dio= -5 contro 26
Dio= (-5 + 26) contro 26
Dio= 21
Testo cifrato | K | E | N | T | IN | T | G | B | O | X |
Valore del testo cifrato (E) | 10 | 04 | 13 | 19 | venti | 19 | 06 | 01 | 14 | 23 |
Chiave | B | E | S | T | B | E | S | T | B | E |
Valore chiave (K) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Valore del testo in chiaro (P) | 09 | 00 | ventuno | 00 | 19 | quindici | 14 | 08 | 13 | 19 |
Testo in chiaro | J | UN | IN | UN | T | P | O | IO | N | T |
Programma:
Linguaggio 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></=>
=>