Вы находитесь на странице: 1из 9

Министерство Образования, Культуры и Исследований

Технический Университет Молдовы

Факультет Вычислительной техники, Информатики и Микроэлектроники

Департамент Информатики и Системной Инженерии

Отчёт
по лабораторной работе N1

Тема: “Criptarea ca metodă de securitate a


informaţiilor”

Disciplina: Tehnologii Ale Securității Informaționale

Выполнил: Bahrin Ion

Группа: IA-214

Проверил: asis.univ V. Strună

КИШИНЕВ 2023
Оглавление
Введение.......................................................................................................................3
1.Цель работы:.................................................................................................................................3
2.Задание..........................................................................................................................................3
Решение........................................................................................................................4
3. Код для шифрования и дешифрования сообщений методом шифра Цезаря........................4
4. Вывод на экран метод шифра Цезаря........................................................................................5
5. Код для шифрования и дешифрования сообщений методом шифра Виженера...................5
6. Вывод на экран метод шифра Виженера...................................................................................6
7. Код для шифрования и дешифрования сообщений методом шифра Вернама.....................7
8. Вывод на экран метод шифра Вернама.....................................................................................7
Вывод............................................................................................................................8

Библиография.............................................................................................................9

2
Лабораторная работа

Введение

1.Цель работы:

2.Задание

3
Решение

3. Код для шифрования и дешифрования сообщений методом шифра


Цезаря

#include <iostream>
#include <string>

using namespace std;

string encrypt(string plaintext, int shift) {


string ciphertext = "";
for (int i = 0; i < plaintext.length(); i++) {
char c = plaintext[i];
if (isalpha(c)) {
c = toupper(c);
c = ((c - 65 + shift) % 26) + 65;
}
ciphertext += c;
}
return ciphertext;
}

string decrypt(string ciphertext, int shift) {


string plaintext = "";
for (int i = 0; i < ciphertext.length(); i++) {
char c = ciphertext[i];
if (isalpha(c)) {
c = toupper(c);
c = ((c - 65 - shift + 26) % 26) + 65;
}
plaintext += c;
}
return plaintext;
}

int main() {
string message = "HELLO WORLD";
int shift = 3;

// Encrypt the message


string encrypted_message = encrypt(message, shift);
cout << "Encrypted message: " << encrypted_message << endl;

// Decrypt the message


string decrypted_message = decrypt(encrypted_message, shift);
cout << "Decrypted message: " << decrypted_message << endl;

return 0;
}

4
4. Вывод на экран метод шифра Цезаря

5. Код для шифрования и дешифрования сообщений методом шифра


Виженера

#include <iostream>
#include <string>
#include <vector>

using namespace std;

string encrypt(string plaintext, string key) {


string ciphertext = "";
int key_length = key.length();
for (int i = 0; i < plaintext.length(); i++) {
char c = plaintext[i];
int shift = key[i % key_length] - 'A';
if (isalpha(c)) {
c = toupper(c);
c = ((c - 65 + shift) % 26) + 65;
}
ciphertext += c;
}
return ciphertext;
}

string decrypt(string ciphertext, string key) {


string plaintext = "";
int key_length = key.length();
for (int i = 0; i < ciphertext.length(); i++) {
char c = ciphertext[i];
int shift = key[i % key_length] - 'A';
if (isalpha(c)) {
c = toupper(c);
c = ((c - 65 - shift + 26) % 26) + 65;
}
plaintext += c;
}
return plaintext;
}

int main() {
string message = "HELLO WORLD";
string key = "SECRET";

// Encrypt the message


5
string encrypted_message = encrypt(message, key);
cout << "Encrypted message: " << encrypted_message << endl;

// Decrypt the message


string decrypted_message = decrypt(encrypted_message, key);
cout << "Decrypted message: " << decrypted_message << endl;

return 0;
}

6. Вывод на экран метод шифра Виженера

7. Код для шифрования и дешифрования сообщений методом шифра


Вернама
#include <iostream>
#include <string>
#include <vector>
#include <random>

using namespace std;

string generate_key(int length) {


string key = "";
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(0, 25);
for (int i = 0; i < length; i++) {
char c = dis(gen) + 'A';
key += c;
}
return key;
}

string encrypt(string plaintext, string key) {


string ciphertext = "";
for (int i = 0; i < plaintext.length(); i++) {
char c = plaintext[i];
char k = key[i];
c = ((c - 'A') ^ (k - 'A')) + 'A';
ciphertext += c;
}
return ciphertext;
}

string decrypt(string ciphertext, string key) {


string plaintext = "";
for (int i = 0; i < ciphertext.length(); i++) {
char c = ciphertext[i];
char k = key[i];

6
c = ((c - 'A') ^ (k - 'A')) + 'A';
plaintext += c;
}
return plaintext;
}

int main() {
string message = "HELLO WORLD";
int message_length = message.length();

// Generate a random key


string key = generate_key(message_length);

// Encrypt the message


string encrypted_message = encrypt(message, key);
cout << "Encrypted message: " << encrypted_message << endl;

// Decrypt the message


string decrypted_message = decrypt(encrypted_message, key);
cout << "Decrypted message: " << decrypted_message << endl;

return 0;
}

8. Вывод на экран метод шифра Вернама

Вывод

В данной лабораторной работе я ознакомился с техникой шифрования с секретным ключом,


а также реализовал шифрование и дешифрование сообщений методами шифра Цезаря,
Виженера и Вернама. В шифре Цезаря каждая буква алфавита сдвигается на несколько
позиций; например в шифре Цезаря при сдвиге +3, A стало бы D, B стало бы E и так далее.
Шифр Виженера состоит из последовательности нескольких шифров Цезаря с различными
значениями сдвига. Для зашифровывания может использоваться таблица алфавитов,
называемая tabula recta или квадрат (таблица) Виженера. Применительно к латинскому
алфавиту таблица Виженера составляется из строк по 26 символов, причём каждая
следующая строка сдвигается на несколько позиций. Таким образом, в таблице получается 26
различных шифров Цезаря. На каждом этапе шифрования используются различные
алфавиты, выбираемые в зависимости от символа ключевого слова. Например, предположим,
что исходный текст имеет такой вид. Человек, посылающий сообщение, записывает ключевое
слово («LEMON») циклически до тех пор, пока его длина не будет соответствовать длине
исходного текста. Первый символ исходного текста («A») зашифрован последовательностью

7
L, которая является первым символом ключа. Первый символ зашифрованного текста («L»)
находится на пересечении строки L и столбца A в таблице Виженера. Точно так же для
второго символа исходного текста используется второй символ ключа; то есть второй символ
зашифрованного текста («X») получается на пересечении строки E и столбца T. Остальная
часть исходного текста шифруется подобным способом. Сообщение разбиваем на отдельные
символы и каждый символ представляем в бинарном виде. XOR принимает сигналы (0 или 1
каждый), проводит над ними логическую операцию и выдает один сигнал, исходя из входных
значений. Если все сигналы равны между собой (0-0 или 1-1 или 0-0-0 и т.д.), то на выходе
получаем 0. Если сигналы не равны (0-1 или 1-0 или 1-0-0 и т.д.), то на выходе получаем 1.
Теперь для шифровки сообщения, введем сам текст для шифровки и ключ такой же длины.
Переведем каждую букву в ее бинарный код и выполним формулу сообщение XOR ключ.

8
Библиография
1. Хостинг для начинающих [https://habr.com/ru/post/444176/ ] (11.02.2023)
2. Шифр Виженера Wikipedia
[https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_
%D0%92%D0%B8%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%B0 ] (11.02.2023)
3. Шифр Цезаря Wikipedia
[https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_
%D0%A6%D0%B5%D0%B7%D0%B0%D1%80%D1%8F] (11.02.2023)

4. Шифр Вернама Wikipedia


[https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_
%D0%92%D0%B5%D1%80%D0%BD%D0%B0%D0%BC%D0%B0#:~:text=Vernam%20cipher)
%20%E2%80%94%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC
%D0%B0%20%D1%81%D0%B8%D0%BC%D0%BC
%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B3%D0%BE
%20%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F,
%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B
%20%D1%81%20%D0%B0%D0%B1%D1%81%D0%BE%D0%BB%D1%8E%D1%82%D0%BD%D0%BE
%D0%B9%20%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE
%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE
%D0%B9%20%D1%81%D1%82%D0%BE%D0%B9%D0%BA%D0%BE%D1%81%D1%82%D1%8C
%D1%8E.] (11.02.2023)
5. Else
[https://else.fcim.utm.md/my/] (11.02.2023)

Вам также может понравиться