
C++. Шифр Виженера. Шифратор написала, а дешифратор не могу собразить. #include «stdafx.h»
#include «pch.h» #include #include #include #include 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; return 0; }

Ответы на вопрос

#include <iostream>
#include <string>
using namespace std;
int main()
{
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];
// }
for (int u = 0; u < b; u++)
{
e = ((F[u] - G[u]));
if (e<0)
e+=26;
B[u] = A[e];
}
//cout << "Ваше зашифрованное слово: " << B << endl;
cout << "Ваше расшифрованное слово: " << B << endl;
return 0;
}



Программа, которую вы предоставили, реализует шифр Виженера для зашифрования слова с использованием ключа. Однако она не содержит функциональность для дешифрования.
Для реализации дешифратора шифра Виженера, вам необходимо создать новую функцию, которая принимает зашифрованное слово и ключ, и возвращает исходное слово. Эта функция будет выполнять обратные операции, чем функция для шифрования: она будет вычитать значения символов ключа из зашифрованного слова, чтобы получить исходное слово.
Вот пример возможной реализации дешифратора:
```cpp string vigenereDecrypt(string B, string C) { string A = "abcdefghijklmnopqrstuvwxyz"; string D = ""; int b = B.size(); int c = C.size(); int *F = new int[b]; int *G = new int[b];
// ... (похожий код для повторения ключа, как в шифраторе)
// Расшифровка слова int e = 0; for (int u = 0; u < b; u++) { e = ((G[u] - F[u] + 26) % 26); D += A[e]; }
return D; } ```
Эта функция принимает зашифрованное слово `B` и ключ `C`, и возвращает исходное слово `D`. Вы можете вызвать эту функцию в `main` для дешифровки слова, введенного пользователем.


Похожие вопросы
Топ вопросов за вчера в категории Информатика








Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili