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

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное

учреждение высшего профессионального образования

«Тульский государственный университет»

Кафедра «Информационная безопасность»

Криптографические методы защиты информации

Лабораторная работа № 1

«Алгоритмы гаммирования»

Выполнили: студенты группы 230711 Проверил: преподаватель

Акользина И. С.

Кузнецова А. В. Басалова Г. В.

Тула 2013
1. Цель работы
Реализовать программно алгоритм гаммирования с конечной гаммой.

2. Ход работы

Задание 1. Шифрование двух целых чисел. Необходимо создать


программу Gamma0, выполняющую шифрование двух чисел методом
гаммирования.

Алгоритм программы.
1. Ввести с клавиатуры исходное число.
2. Вывести его на экран.
3. Ввести с клавиатуры ключ.
4. Вывести его на экран.
5. Применить к исходному числу и ключу операцию XOR.
6. Вывести полученное число на экран.

Текст программы.
// gamma0.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;

int x, key, y;

int _tmain(int argc, _TCHAR* argv[])


{
setlocale(LC_ALL, "RUS");
cout << "Введите исходное число" << endl;
cin>>x;
cout << "Было введено " << x << endl;
cout << "Введите ключ" << endl;
cin>>key;
cout << "Был введен ключ " << key << endl;
y=x^key;
cout<< "Результат " << y;

getch();
return 0;
}
Результат работы программы.
Шифрование.

Рис. 1

Расшифрование.

Рис. 2

Задание 2. Шифрование строки символов. Необходимо создать


программу Gamma1, выполняющую шифрование введенной с клавиатуры
строки методом гаммирования. При шифровании исходная строка
обрезается по длине ключа.

Алгоритм программы.
1. Ввести с клавиатуры исходную фразу.
2. Вывести исходную фразу на экран.
3. Присвоить переменной len1 значение, равное длине исходной
фразы.
4. Вывести длину исходной фразы на экран.
5. Ввести с клавиатуры ключ.
6. Вывести ключ на экран.
7. Присвоить переменной len2 значение, равное длине ключа.
8. Шифрование. Шифруется столько символов, сколько содержится
в ключе. Цикл i = 0 до i = len2.
9. Получить номер i-го символа из исходной фразы в таблице
кодировки символов(x).
10. Получить номер i-го символа ключа в таблице кодировки
символов(y).
11. Применить операцию XOR к числам x и y. Результат – число z.
12. Получить символ, номер которого в таблице кодировки символов
равен z.
13. Прибавить этот символ к результату.
14. Увеличить значение i на 1.
15. Переход к п. 9.
16. Вывести полученную строку на экран.
17. Расшифрование – аналогично шифрованию, только вместо
исходной фразы – полученная строка.

Текст программы.
// gamma1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string"
using namespace std;

string str1, key, str2, str3;


int len1, len2, i, x, y, z;

int _tmain(int argc, _TCHAR* argv[])


{
setlocale(LC_ALL, "RUS");
cout << "Vvedite ishodnuyu frasu: " << endl;
getline(cin, str1);
cout << "You tiped: " << str1 << endl;
len1=str1.length();
cout << "Len of str " << len1 << endl;
cout << "Vvedite key" << endl;
getline(cin, key);
cout << "You tiped " << key << endl;
len2=key.length();
for (i=0; i<len2; i++)
{
x=int(str1[i]);
y=int(key[i]);
z=x^y;

string z1(1, z);


str2=str2+z1;

cout << "Zashifrovali: " << str2 << endl;

for (i=0; i<len2; i++)


{
x=int(str2[i]);
y=int(key[i]);
z=x^y;

string z1(1, z);


str3=str3+z1;

cout << "Rashifrovali: " << str3 << endl;


getch();

return 0;
}

Результат работы программы.

Рис. 3

Задание 3. Шифрование символов из файла. Необходимо создать


программу Gamma2, выполняющую шифрование символов, считываемых
из файла. Результатом работы программы будет текстовый файл,
содержащий зашифрованный текст, обрезанный по длине ключа.

Алгоритм программы.
1. Ввести с клавиатуры ключ.
2. Вывести ключ на экран.
3. Присвоить переменной len2 значение, равное длине ключа.
4. Открыть входной файл для чтения.
5. Открыть выходной файл для записи.
6. Присвоить переменной size значение, равное размеру входного
файла в байтах.
7. Шифрование. Цикл i = 0 до i = len2.
8. Считать i – й байт из входного файла.
9. Привести его значение к типу int. Результат – x.
10. Получить номер i-го символа ключа в таблице кодировки
символов(y).
11. Применить операцию XOR к числам x и y. Результат – число z.
12. Привести значение числа z к строковому типу.
13. Прибавить это значение к результату.
14. Увеличить значение i на 1.
15. Переход к п. 8.
16. Вывести результат в файл shifr.txt.
17. Расшифрование – аналогично шифрованию. Гаммирование
производится для файла shifr.txt и ключа. Результат побайтово
выводится в выходной файл.

Текст программы.
// gamma2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "string"
using namespace std;

ofstream out("shifr.txt");

string key, str2, str3;


int len2, i, x, y, z;

int _tmain(int argc, _TCHAR* argv[])


{
cout << "Vvedite Key: " << endl;
getline(cin, key);
cout << "You tiped: " << key << endl;
len2=key.length();
FILE *file;
FILE *f;
char x1;
file=fopen("pr1.txt", "rb+");
f=fopen("pr1_1.txt", "rb+");

long size;
fseek(file, 0, SEEK_END);
size=ftell(file);
fseek(file, 0, SEEK_SET);

for (long i=0; i<len2; i++)


{
fread(&x1, sizeof(char),1,file);
x=int(x1);
y=int(key[i]);
z=x^y;

string z1(1, z);


str2=str2+z1;

out << "Zashifrovali: " << str2 << endl;

for (i=0; i<len2; i++)


{
x=int(str2[i]);
y=int(key[i]);
z=x^y;

char z1=char(z);
fwrite(&z1, sizeof(char),1,f);
}

fclose(file);
fclose(f);

return 0;
}

Результат работы программы (для текстового файла).

Рис. 4
Входной файл pr1.txt
1234567890

Файл shifr.txt
Zashifrovali: ZWJ
Выходной файл pr1_1.txt
123

Задание 4. Изменение программы для шифрования строки символов.


Необходимо изменить программу Gamma1 так, чтобы выполнялось
шифрование и расшифрование всей введенной с клавиатуры строки вне
зависимости от длины ключа.

Алгоритм программы.
1. Ввести с клавиатуры исходную фразу.
2. Вывести исходную фразу на экран.
3. Присвоить переменной len1 значение, равное длине исходной
фразы.
4. Вывести длину исходной фразы на экран.
5. Ввести с клавиатуры ключ.
6. Вывести ключ на экран.
7. Присвоить переменной len2 значение, равное длине ключа.
8. Присвоить переменной j значение, равное 0.
9. Цикл i = 0 до i = len1.
10. Если значение j = len2, то j = 0.
11. Получить номер i-го символа из исходной фразы в таблице
кодировки символов(x).
12. Получить номер i-го символа ключа в таблице кодировки
символов(y).
13. Применить операцию XOR к числам x и y. Результат – число z.
14. Получить символ, номер которого в таблице кодировки символов
равен z.
15. Прибавить этот символ к результату.
16. Увеличить значение j на 1.
17. Увеличить значение i на 1.
18. Переход к п. 10.
19. Вывести полученную строку на экран.
20. Расшифрование – аналогично шифрованию, только вместо
исходной фразы – полученная строка.

Текст программы.
// gamma3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string"
using namespace std;

string str1, key, str2, str3;


int len1, len2, i, x, y, z;

int _tmain(int argc, _TCHAR* argv[])


{
setlocale(LC_ALL, "RUS");
cout << "Vvedite ishodnuyu frasu: " << endl;
getline(cin, str1);
cout << "You tiped: " << str1 << endl;
len1=str1.length();
cout << "Len of str " << len1 << endl;
cout << "Vvedite key" << endl;
getline(cin, key);
cout << "You tiped " << key << endl;
len2=key.length();

int j=0;
for (i=0; i<len1; i++)
{
if (j==len2) j=0;

x=int(str1[i]);
y=int(key[j]);
z=x^y;

string z1(1, z);


str2=str2+z1;
j++;
}

cout << "Zashifrovali: " << str2 << endl;

j=0;
for (i=0; i<len1; i++)
{
if (j==len2) j=0;
x=int(str2[i]);
y=int(key[j]);
z=x^y;

string z1(1, z);


str3=str3+z1;
j++;
}

cout << "Rashifrovali: " << str3 << endl;


getch();

return 0;
}

Результат работы программы.

Рис. 5

Задание 5. Изменение программы для шифрования и расшифрования


файла. Необходимо изменить программу Gamma2, выполняющую
шифрование символов, считываемых из файла так, чтобы выполнялось
шифрование всего файла целиком.

Алгоритм программы.
1. Ввести с клавиатуры ключ.
2. Вывести ключ на экран.
3. Присвоить переменной len2 значение, равное длине ключа.
4. Открыть входной файл для чтения.
5. Открыть выходной файл для записи.
6. Присвоить переменной size значение, равное размеру входного
файла в байтах.
7. Присвоить переменной j значение, равное 0.
8. Шифрование. Цикл i = 0 до i = len2.
9. Если значение j = len2, то j = 0.
10.Считать i – й байт из входного файла.
11.Привести его значение к типу int. Результат – x.
12. Получить номер i-го символа ключа в таблице кодировки
символов(y).
13. Применить операцию XOR к числам x и y. Результат – число z.
14. Привести значение числа z к строковому типу.
15. Прибавить это значение к результату.
16. Увеличить значение j на 1.
17. Увеличить значение i на 1.
18. Переход к п. 9.
19. Вывести результат в файл shifr.txt.
20. Расшифрование – аналогично шифрованию. Гаммирование
производится для файла shifr.txt и ключа. Результат побайтово
выводится в выходной файл.

Текст программы.
// gamma4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "string"
using namespace std;

ofstream out("shifr.txt");

string key, str2, str3;


int len2, i, x, y, z;

int _tmain(int argc, _TCHAR* argv[])


{
cout << "Vvedite Key: " << endl;
getline(cin, key);
cout << "You tiped: " << key << endl;
len2=key.length();

FILE *file;
FILE *f;
char x1;
file=fopen("pr1.txt", "rb+");
f=fopen("pr1_1.txt", "rb+");

long size;
fseek(file, 0, SEEK_END);
size=ftell(file);
fseek(file, 0, SEEK_SET);
long j=0;
for (long i=0; i<size; i++)
{
if (j==len2) j=0;
fread(&x1, sizeof(char),1,file);
x=int(x1);
y=int(key[j]);
z=x^y;

string z1(1, z);


str2=str2+z1;
j++;
}

out << "Zashifrovali: " << str2 << endl;

j=0;
for (i=0; i<size; i++)
{
if (j==len2) j=0;
x=int(str2[i]);
y=int(key[j]);
z=x^y;

char z1=char(z);
fwrite(&z1, sizeof(char),1,f);
j++;
}

fclose(file);
fclose(f);

return 0;
}

Результат работы программы (для текстового файла).

Рис. 6
Входной файл pr1.txt
1234567890

Файл shifr.txt
Zashifrovali: ZWJ_PO\]@[

Выходной файл pr1_1.txt


1234567890
Размер файла результата такой же, как у исходного файла.

3. Вывод
В ходе лабораторной работы мы реализовали программно алгоритм
гаммирования с конечной гаммой.

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

  • лаб2 2
    лаб2 2
    Документ7 страниц
    лаб2 2
    anastasia1844
    Оценок пока нет
  • лаб3 3
    лаб3 3
    Документ5 страниц
    лаб3 3
    anastasia1844
    Оценок пока нет
  • лаб7
    лаб7
    Документ8 страниц
    лаб7
    anastasia1844
    Оценок пока нет
  • лаб5
    лаб5
    Документ10 страниц
    лаб5
    anastasia1844
    Оценок пока нет
  • лаб4 4
    лаб4 4
    Документ8 страниц
    лаб4 4
    anastasia1844
    Оценок пока нет
  • лаб4
    лаб4
    Документ9 страниц
    лаб4
    anastasia1844
    Оценок пока нет
  • лаб3
    лаб3
    Документ10 страниц
    лаб3
    anastasia1844
    Оценок пока нет
  • лаб2
    лаб2
    Документ9 страниц
    лаб2
    anastasia1844
    Оценок пока нет
  • лаб1
    лаб1
    Документ19 страниц
    лаб1
    anastasia1844
    Оценок пока нет
  • LABA3
    LABA3
    Документ5 страниц
    LABA3
    ss sss
    Оценок пока нет
  • IPsec между Cisco и NSX Edge
    IPsec между Cisco и NSX Edge
    Документ5 страниц
    IPsec между Cisco и NSX Edge
    Тимур Юсипов
    Оценок пока нет
  • Договор на Контур.Экстерн
    Договор на Контур.Экстерн
    Документ6 страниц
    Договор на Контур.Экстерн
    Елена Еркина
    Оценок пока нет
  • 60 вопросов кибербезопасность
    60 вопросов кибербезопасность
    Документ13 страниц
    60 вопросов кибербезопасность
    mddnocap
    Оценок пока нет
  • Про Криптографию Rus 2020
    Про Криптографию Rus 2020
    Документ242 страницы
    Про Криптографию Rus 2020
    dfssfsfsvdv
    Оценок пока нет
  • АНОТАЦИЯ
    АНОТАЦИЯ
    Документ9 страниц
    АНОТАЦИЯ
    IMBA
    Оценок пока нет
  • Колледж ползунова
    Колледж ползунова
    Документ10 страниц
    Колледж ползунова
    Вероника Воронцова
    Оценок пока нет
  • Session 4 - Vladimir Buryachok
    Session 4 - Vladimir Buryachok
    Документ25 страниц
    Session 4 - Vladimir Buryachok
    Caţuba Ghennadii
    Оценок пока нет