
(С++) Розробити програму шифрування та розшифрування шифром простої заміни


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

Чтобы разработать программу шифрования и дешифрования с простым шифром замены на C++, вы можете использовать следующий код:
#include <iostream>
#include <string>
using namespace std;
string encrypt(string plaintext, string key)
{
string ciphertext = "";
for (int i = 0; i < plaintext.length(); i++)
{
char ch = plaintext[i];
int index = (int)(ch);
int newIndex = (index + key[i % key.length()]) % 128;
ciphertext += (char)(newIndex);
}
return ciphertext;
}
string decrypt(string ciphertext, string key)
{
string plaintext = "";
for (int i = 0; i < ciphertext.length(); i++)
{
char ch = ciphertext[i];
int index = (int)(ch);
int newIndex = (index - key[i % key.length()]) % 128;
plaintext += (char)(newIndex);
}
return plaintext;
}
int main()
{
string plaintext, key;
cout << "Введите открытый текст: ";
getline(cin, plaintext);
cout << "Введите ключ: ";
getline(cin, key);
string ciphertext = encrypt(plaintext, key);
cout << "Введите шифротекст: " << ciphertext << endl;
string decryptedText = decrypt(ciphertext, key);
cout << "Введите расшифрованный текст: " << decryptedText << endl;
return 0;
}



Звичайний шифр простої заміни - це один з найпростіших методів шифрування, де кожній літері алфавіту ставиться у відповідність інша літера алфавіту. Для розробки програми шифрування та розшифрування шифру простої заміни використаємо мову програмування C++.
Основною частиною програми будуть функції для шифрування та розшифрування тексту з використанням шифру простої заміни. Ось приклад коду:
cpp#include <iostream>
#include <string>
#include <unordered_map>
std::string encrypt(const std::string& plaintext, const std::unordered_map<char, char>& cipher)
{
std::string ciphertext;
for (char c : plaintext) {
if (cipher.count(c) > 0) {
ciphertext += cipher.at(c);
} else {
ciphertext += c; // Додаємо символ без змін
}
}
return ciphertext;
}
std::string decrypt(const std::string& ciphertext, const std::unordered_map<char, char>& cipher)
{
std::string plaintext;
for (char c : ciphertext) {
bool found = false;
for (const auto& entry : cipher) {
if (entry.second == c) {
plaintext += entry.first;
found = true;
break;
}
}
if (!found) {
plaintext += c; // Додаємо символ без змін
}
}
return plaintext;
}
int main()
{
std::string plaintext;
std::unordered_map<char, char> cipher;
// Введення шифру
for (char c = 'a'; c <= 'z'; ++c) {
char encryptedChar;
std::cout << "Введіть заміну для " << c << ": ";
std::cin >> encryptedChar;
cipher[c] = encryptedChar;
}
// Введення тексту для шифрування
std::cout << "Введіть текст для шифрування: ";
std::cin.ignore(); // Пропускаємо символ нового рядка після введення шифру
std::getline(std::cin, plaintext);
// Шифрування тексту
std::string ciphertext = encrypt(plaintext, cipher);
std::cout << "Зашифрований текст: " << ciphertext << std::endl;
// Розшифрування тексту
std::string decryptedText = decrypt(ciphertext, cipher);
std::cout << "Розшифрований текст: " << decryptedText << std::endl;
return 0;
}
В цьому коді ми використовуємо std::unordered_map<char, char>
для зберігання заміни літер алфавіту. К


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