Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Лабораторная работа № 1
«Алгоритмы гаммирования»
Акользина И. С.
Кузнецова А. В. Басалова Г. В.
Тула 2013
1. Цель работы
Реализовать программно алгоритм гаммирования с конечной гаммой.
2. Ход работы
Алгоритм программы.
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;
getch();
return 0;
}
Результат работы программы.
Шифрование.
Рис. 1
Расшифрование.
Рис. 2
Алгоритм программы.
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;
return 0;
}
Рис. 3
Алгоритм программы.
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");
long size;
fseek(file, 0, SEEK_END);
size=ftell(file);
fseek(file, 0, SEEK_SET);
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
Алгоритм программы.
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;
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;
j=0;
for (i=0; i<len1; i++)
{
if (j==len2) j=0;
x=int(str2[i]);
y=int(key[j]);
z=x^y;
return 0;
}
Рис. 5
Алгоритм программы.
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");
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;
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\]@[
3. Вывод
В ходе лабораторной работы мы реализовали программно алгоритм
гаммирования с конечной гаммой.