ЛАБОРАТОРНАЯ РАБОТА №8

Тема работы: Программное шифрование пароля.

Цель работы: Изучить работу программы по шифрации пароля; получить представление о механизме использования ключей; ознакомиться с предложенным алгоритмом шифрования.

Теоретическая часть:

Пароль шифруется с помощью простейшего метода шифрования-замены, когда каждый символ пароля заменяется другим символом по определенному алгоритму. В примере рассмотрен способ шифрации, при котором каждый символ пароля преобразуется из символьной формы в числовую величину. Далее над числовой переменной производятся преобразования: увеличение или уменьшение числовой величины, могут быть использованы другие виды преобразований.

В примере числовая величина увеличивается на значение, вычисляемое по формуле: код_зашифрованного_символа = код_символа + (ключ + 1). Далее производится обратное преобразование числовой величины в символьную форму, которая и записывается в файл. В итоге в файле хранится зашифрованная копия пароля. Для расшифровки пароля используется другая программа, которая повторяет все операторы первой, но в обратном порядке. Написание этой программы - задача следующей лабораторной работы.

Пароль необходимо создавать размером не менее 6 и не более 15 символов. Более объемные пароли неудобны в использовании, хранении и обработке программами. Ключ в рассмотренном примере желательно использовать не более 30, т.к. ASCII – коды символов лежат в пределах 0-255.

 

Ход работы:

1.   В компилятор ТС++ загрузите программу shifrac.c. В случае отсутствия файла на диске используйте текст приведенной ниже программы (наберите ее в текстовом редакторе компилятора ТС++, комментарии, данные в тексте программы не набирать!):

/*Программное шифрование пароля с ключом, хранящимся в файле на диске.

Пароль в зашифрованном виде хранится в файле на диске*/

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

int a, c, c1, d, i, t;

int ii, iii;

FILE *fp;

FILE *fpp;

main()

{

key_file();  /*Функция открытия файла для записи в него ключа,

 ключ хранится в файле в незашифрованном виде*/

read_key();  /*Функция чтения ключа из файла*/

shifr_file();   /*Функция шифрации пароля при записи в файл*/

read_key();

printf("\nКлюч = %d",i);

return 0;

}

key_file() /*Функция открытия файла для записи в него ключа,

 ключ хранится в файле в незашифрованном виде*/

{

int z;

clrscr();

fpp=fopen("c:\\s.key", "w");

if ((fpp=fopen("c:\\s.key", "w"))==NULL)/*Открытие файла на запись*/

{

printf("Невозможно открыть файл");

return 1;

}

else

{

clrscr();

printf("Введите ключ: число в интервале (0-100) ");

do

{ 

t=getchar();/*Ввод символов с клавиатуры*/

if (t!='\n')

{

fputc(t, fpp); /*Посимвольная запись строки в файл*/

}

}

while(t!='\n');

fclose(fpp);

}

return 0;

}

shifr_file()    /*Функция шифрации пароля при записи в файл*/

{

clrscr();

fp=fopen("c:\\parol.pwl", "w");

if ((fp=fopen("c:\\parol.pwl", "w"))==NULL)/*Открытие файла на запись*/

{

printf("Невозможно открыть файл");

return 1;

}

else

printf("(C),inn,2001\n");

printf("Шифрация пароля и запись его в файл на диске,");

printf("в директории под именем\n C:\\parol.pwl \n");

printf("Введите пароль (используйте только латинские буквы и цифры\n");

printf("длина пароля не менее 6 и не более 15 символов: ");

do

{

a=getchar();/*Ввод символов с клавиатуры*/

if (a!='\n'){

printf("\n");

printf("Символ введенный с клавиатуры - (%c), его  ",a);

c=toascii(a);/*Преобразование символов в коды ASCII*/

printf("код ASCII=%d\n",c);

c1=c+i;/*Увеличение порядкового номера кода */

printf("Преобразованный код ASCII=%d\t",c1);

i++;

if((islower(c1)!=0)) /*Проверка регистра вводимых символов*/

{

d=tolower(c1);  /*Обратное преобразование кода в символ (нижний регистр)*/

printf("(%c) - зашифрованный символ\t\n",d);

}

else

{

d=toupper(c1);  /*Обратное преобразование кода в символ (верхний регистр)*/

printf("(%c) - зашифрованный символ\t\n",d);

}           

fputc(d, fp);

}

}

while(a!='\n');

fclose(fp);

return 0;

}

read_key()  /*Функция чтения ключа из файла*/

{

FILE *fpp;

char *ii;

fpp=fopen("c:\\s.key", "r");

if ((fpp=fopen("c:\\s.key", "r"))==NULL)/*Открытие

файла на чтение*/

{

printf("Не могу открыть файл! Файл с ключом не существует!");

return 1;

}

else

{                       

ii=fgets(ii,'\n',fpp);/*Чтение символов из файла*/   

i=atoi(ii);

}

fclose(fpp);

return 0;

}

2.   Выполните эту программу пошагово (трассировка), запишите имена операторов и функций, используемых данной программой, дайте их краткую характеристику.

3.   Изучите принцип работы программы; взаимосвязь функций. Запишите в отчет название и назначение каждой функции, приведенной в функции main.

4.   Просмотрите, какие сообщения выдает программа по окончании работы. Запишите промежуточные результаты работы для пароля zzz, эти результаты содержат также ASCII-коды преобразованных символов(этот результат можно просмотреть с помощью клавиш Alt+F5).

5.   Какие файлы создает программа шифрации пароля, где они создаются? Запишите их. Просмотрите содержимое этих файлов. Что содержит файл пароля?

6.   Законспектируйте характеристику алгоритма шифрования. В чем он заключается?

7.   Протестируйте программу для следующих паролей: ZZZ111, ZzZzXxXxCcCc, zzzZZZ000. Ответьте на вопрос: различает ли программа регистр вводимых символов? Если да, то почему?

8.   Введите ключ больше 100. Как работает программа для рассмотренных паролей?

9.   Введите для этих же паролей ключ в диапазоне 100-1000. Возможна ли расшифровка паролей с такими ключами? Если да, то почему?

10.          Проверьте работу программы для паролей длина которых превышает 15 символов. Объясните почему с увеличением длины шифруемого пароля, невозможно будет его расшифровать?

11.          Определите какой максимально возможный код ASCII может быть представлен в виде символа? Какое это десятичное число?

 Контрольные вопросы:

1.     Что такое ASCII – коды, и каков диапазон их десятичных значений?

2.     Какие функции и операторы С++ используются для шифрации пароля?

 

Отчет должен содержать:

1.   Тему работы, цель работы.

2.   Распечатку программы.

3.   Описание хода выполнения работы и письменные ответы на задания хода работы.

4.   Ответы на контрольные вопросы.