Увод
Вигенере шифра је алгоритам који се користи за шифровање и дешифровање текста. Вигенере шифра је алгоритам шифровања алфабетског текста који користи низ испреплетених цезарових шифри. Заснован је на словима кључне речи. То је пример полиалфабетске супституцијске шифре. Овај алгоритам је лак за разумевање и имплементацију. Овај алгоритам је први пут описао 1553 Ђован Батиста Белазо . За шифровање и дешифровање текста користи Вигенерову табелу или Вигенеров квадрат. Вигенере табела се такође назива табула рецта.
Две методе изводе Вигенерову шифру.
Метод 1
Када је дата Вигенере табела, шифровање и дешифровање се обављају коришћењем Вигенере табеле (матрица 26 * 26) у овој методи.
Пример: отворени текст је 'ЈАВАТПОИНТ', а кључ је 'БЕСТ'.
За генерисање новог кључа, дати кључ се понавља кружно, све док дужина обичног текста није једнака новом кључу.
Шифровање
итерација мапе јава
Прво слово отвореног текста се комбинује са првим словом кључа. Колона обичног текста 'Ј' и ред кључа 'Б' секу абецеду 'К' у вигенере табели, тако да је прво слово шифрованог текста 'К'.
Слично, друго слово отвореног текста се комбинује са другим словом кључа. Колона обичног текста 'А' и ред кључа 'Е' секу абецеду 'Е' у вигенере табели, тако да је друго слово шифрованог текста 'Е'.
Овај процес се наставља у континуитету све док се отворени текст не заврши.
Ципхертект = КЕНТУТГБОКС
Дешифровање
Дешифровање се врши помоћу реда кључева у табели вигенере. Прво изаберите ред кључног слова, пронађите позицију слова шифрованог текста у том реду, а затим изаберите ознаку колоне одговарајућег шифрованог текста као отворени текст.
На пример, у реду кључа је „Б“, а шифровани текст је „К“, а ово слово шифрованог текста се појављује у колони „Ј“, што значи да је прво слово отвореног текста „Ј“.
Следеће, у реду кључа је 'Е', а шифровани текст је 'Е' и ово слово шифрованог текста се појављује у колони 'А', што значи да је друго слово отвореног текста 'А'.
Овај процес се наставља све док се шифровани текст не заврши.
питхон сортирани тупле
Обичан текст = ЈАВАТПОИНТ
Метод 2
Када вигенерова табела није дата, шифровање и дешифровање се врши Вигенар-овом алгебарском формулом у овој методи (претворите слова (А-З) у бројеве (0-25)).
Формула шифровања је,
Ии= (Пи+ Ки) против 26Формула за дешифровање је,
Ди= (Еи- Ки) против 26У сваком случају (Ди) вредност постаје негативна (-ве), у овом случају ћемо негативној вредности додати 26.
Где,
Е означава шифровање.
форматирајте датум у јава
Д означава дешифровање.
П означава отворени текст.
К означава кључ.
Напомена: 'и' означава помак и-тог броја слова, као што је приказано у табели испод.
Пример: отворени текст је 'ЈАВАТПОИНТ', а кључ је 'БЕСТ'.
Шифровање: Ии= (Пи+ Ки) против 26
Обичан текст | Ј | А | ИН | А | Т | П | О | И | Н | Т |
Вредност отвореног текста (П) | 09 | 00 | двадесет један | 00 | 19 | петнаест | 14 | 08 | 13 | 19 |
Кључ | Б | И | С | Т | Б | И | С | Т | Б | И |
Кључна вредност (К) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Вредност шифрованог текста (Е) | 10 | 04 | 13 | 19 | двадесет | 19 | 06 | 01 | 14 | 23 |
Ципхертект | К | И | Н | Т | ИН | Т | Г | Б | О | Икс |
Дешифровање: Ди= (Еи- Ки) против 26
како затворити режим програмера
Ако било која вредност (Ди) постане негативна (-ве), у овом случају ћемо негативној вредности додати 26. Као, треће слово шифрованог текста;
Н = 13 и С = 18
Ди= (Еи- Ки) против 26
Ди= (13 - 18) наспрам 26
Ди= -5 према 26
Ди= (-5 + 26) против 26
Ди= 21
Ципхертект | К | И | Н | Т | ИН | Т | Г | Б | О | Икс |
Вредност шифрованог текста (Е) | 10 | 04 | 13 | 19 | двадесет | 19 | 06 | 01 | 14 | 23 |
Кључ | Б | И | С | Т | Б | И | С | Т | Б | И |
Кључна вредност (К) | 01 | 04 | 18 | 19 | 01 | 04 | 18 | 19 | 01 | 04 |
Вредност отвореног текста (П) | 09 | 00 | двадесет један | 00 | 19 | петнаест | 14 | 08 | 13 | 19 |
Обичан текст | Ј | А | ИН | А | Т | П | О | И | Н | Т |
Програм:
Ц језик
#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></=>
=>