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

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

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

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

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

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

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

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

«Программная реализация алгоритма шифрования перестановкой


по таблице»

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

Акользина И. С. Басалова Г. В.

Кузнецова А. В.

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

2. Ход работы
Вариант 2.

Задание. Разработать программы шифрования/расшифрования


файлов произвольного размера методом перестановки по таблице. Размеры
таблицы: 4 столбца × 5 строк. Ключ – последовательность заполнения
строк таблицы; задается с клавиатуры.

Шифрование.
Алгоритм программы.
1. Открыть входной файл для чтения.
2. Открыть выходной файл для записи.
3. Ввести ключ с клавиатуры.
4. Для каждых 20 байтов входного файла:
5. Создать таблицу 4 столбца × 5 строк.
6. Заполнить таблицу по строкам в соответствии с ключом.
7. Считать данные из таблицы по столбцам.
8. Вывести результат в выходной файл.

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

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

int key;

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


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

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

setlocale(LC_ALL, "RUS");
cout << "Введите ключ" << endl;
cin >> key;

int s1[5];

s1[0]=key/10000-1;
key=key%10000;
s1[1]=key/1000-1;
key=key%1000;
s1[2]=key/100-1;
key=key%100;
s1[3]=key/10-1;
key=key%10;
s1[4]=key-1;

int** m;
m=new int*[5];
for (int i=0; i<5; i++)
m[i]=new int[4];

long k2;
if ((size%20)==0) k2=size/20;
else k2=size/20+1;

long x=0;

for (long o=0; o<k2; o++)


{

for (int i=0; i<5; i++) {


for (int c=0; c<4; c++)
m[i][c]=-1000000;
}

for (int j=0; j<5; j++)


{
for (int i=0; i<4; i++)
{
if (x<size) {
fread(&x1, sizeof(char),1,file);
m[s1[j]][i]=int(x1);
x++;}
}
}

for (int i=0; i<4; i++)


{
for (int c=0; c<5; c++)
{
char z2;
if (m[c][i]!=-1000000)
{z2=char(m[c][i]);
fwrite(&z2, sizeof(char),1,f);}
}
}
}

fclose(file);
fclose(f);

return 0;
}

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


Ключ: 24351

Файл pr1.txt
1234567890qwertyuiopas

Файл shifr.txt
u195ei206ro3q7tp4w8yas

Расшифрование.
Алгоритм программы.
1. Открыть входной файл для чтения.
2. Открыть выходной файл для записи.
3. Ввести ключ с клавиатуры.
4. Для каждых 20 байтов входного файла:
5. Создать таблицу 4 столбца × 5 строк.
6. Заполнить таблицу по столбцам.
7. Считать данные из таблицы по строкам в соответствии с ключом.
8. Вывести результат в выходной файл.

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

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

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


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

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

setlocale(LC_ALL, "RUS");
cout << "Введите ключ" << endl;
cin >> key;

int s1[5];

s1[0]=key/10000-1;
key=key%10000;
s1[1]=key/1000-1;
key=key%1000;
s1[2]=key/100-1;
key=key%100;
s1[3]=key/10-1;
key=key%10;
s1[4]=key-1;

int** m;
m=new int*[5];
for (int i=0; i<5; i++)
m[i]=new int[4];

long k2, k3;


k2=size/20;
k3=size%20;

long x=0;

for (long o=0; o<k2; o++)


{
for (int i=0; i<5; i++) {
for (int c=0; c<4; c++)
m[i][c]=-1000000;
}

for (int i=0; i<4; i++)


{
for (int j=0; j<5; j++)
{
if (x<size) {
fread(&x1, sizeof(char),1,file);
m[j][i]=int(x1);
x++;
}
}
}

for (int i=0; i<5; i++)


{
for (int c=0; c<4; c++)
{
char z2;
if (m[s1[i]][c]!=-1000000)
{z2=char(m[s1[i]][c]);
fwrite(&z2, sizeof(char),1,f);}
}
}
}

if (k3!=0)
{
int k4=k3/4;
int k5=k3-k4*4;

for (int i=0; i<5; i++) {


for (int c=0; c<4; c++)
m[i][c]=-1000000;
}

for (int i=0; i<4; i++)


{
for (int j=0; j<5; j++)
{
if (x<size) {
bool l=1;
if (i<k5) {
for (int b=k4+1; b<5; b++)
if (j==s1[b]) l=0;}
else {
for (int b=k4; b<5; b++)
if (j==s1[b]) l=0;}
if (l!=0) {
fread(&x1, sizeof(char),1,file);
m[j][i]=int(x1);
x++;
}
}
}
}

for (int i=0; i<5; i++)


{
for (int c=0; c<4; c++)
{
char z2;
if (m[s1[i]][c]!=-1000000)
{z2=char(m[s1[i]][c]);
fwrite(&z2, sizeof(char),1,f);}
}
}
}

fclose(file);
fclose(f);

return 0;
}
Результат работы программы.
Ключ: 24351

Файл shifr.txt
u195ei206ro3q7tp4w8yas

Файл pr1_1.txt
1234567890qwertyuiopas

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

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

  • лаб3 3
    лаб3 3
    Документ5 страниц
    лаб3 3
    anastasia1844
    Оценок пока нет
  • лаб4 4
    лаб4 4
    Документ8 страниц
    лаб4 4
    anastasia1844
    Оценок пока нет
  • лаб7
    лаб7
    Документ8 страниц
    лаб7
    anastasia1844
    Оценок пока нет
  • лаб5
    лаб5
    Документ10 страниц
    лаб5
    anastasia1844
    Оценок пока нет
  • лаб4
    лаб4
    Документ9 страниц
    лаб4
    anastasia1844
    Оценок пока нет
  • лаб2
    лаб2
    Документ9 страниц
    лаб2
    anastasia1844
    Оценок пока нет
  • лаб3
    лаб3
    Документ10 страниц
    лаб3
    anastasia1844
    Оценок пока нет
  • лаб1
    лаб1
    Документ19 страниц
    лаб1
    anastasia1844
    Оценок пока нет