Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.122.4] |
|
Сообщ.
#1
,
|
|
|
Шифр Виженера: переписать код так, чтобы программа не только зашифровала, но и расшифровала текст ...Текст он зашифрует но не расшифрует. А как сделать чтобы он зашифровал и расшифровал текст???
#include "stdafx.h" #include <ctime> #include <string> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string B, C, D = ""; string A = "abcdefghijklmnopqrstuvwxyz"; //наш алфавит setlocale(LC_ALL, "RUS"); cout « "Введите слово : "; cin » B; cout « "Введите ключ : "; cin » C; int* F = new int[B.size()]; int* G = new int[B.size()]; int c = C.size(); //делаем замену переменных для удобства int b = B.size(); //Первое условие. Если длина вводимого слова болше, либо равна длине ключа if (b >= c) { for (int i = 0; i < (b / c); i++) { D = D + C; //Записываем целое количество ключа. Растягиваем ключ по длине слова. } for (int j = 0; j < (b % c); j++) { D = D + C[j]; } } else { for (int s = 0; s < b; s++) { D = D + B[s]; } //Иначе если ключ длинее слова, ускорачиваем ключ до длины слова. } cout « D « endl; for (int k = 0; k < b; k++) { for (int n = 0; n < 26; n++) { if (B[k] == A[n]) { F[k] = n; } if (D[k] == A[n]) { G[k] = n; } //Здесь мы уже начинаем щифровать. Смысл заключается а том, что мы ишем номер буквы во //вводимом ключе и номере, а после чего записываем //их в массив } } int e = 0; for (int u = 0; u < b; u++) { e = ((F[u] + G[u]) % 26); B[u] = A[e]; } cout « "Ваше зашифрованоое слово: " « B « endl; system("pause"); return 0; } |
Сообщ.
#2
,
|
|
|
Ну, согласно вики:
Если буквы A—Z соответствуют числам 0—25, то шифрование Виженера можно записать в виде формулы: C[u] = (F[u] + G[u]) % 26 Расшифровка: F[u] = (C[u] - G[u] + 26) % 26 |