ЛАБОРАТОРНАЯ РАБОТА №9 |
Тема работы: Программная дешифрация пароля. Цель
работы:
Изучить
взаимодействие
программ
шифрации и
дешифрации
пароля;
научиться
использовать
шифрование
для
закрытия
секретных
данных. |
Теоретическая
часть: Для
расшифровки
пароля
используется
программа,
которая
преобразует
пароль в
первоначальные
коды
введенных с
клавиатуры
символов.
Используются
те же
операторы и
функции, что
и для
шифровки, но
преобразование
осуществляется
в обратном
порядке.
Преобразованный
пароль
сравнивается
с вводимым с
клавиатуры,
сравнение
производится
посимвольно.
В случае
ввода
правильного
пароля
происходит
дальнейшее
выполнение
программы. В
противном
случае
происходит
прекращение
работы
программы. В
примере
рассмотрен
способ
дешифрации,
при котором
каждый
символ
пароля
преобразуется
из
символьной
формы в
числовую.
Далее над
числовой
переменной
производятся
преобразования
обратные
тем, которые
производились
в программе
шифрации:
уменьшение
числовой
величины ASCII
- кода по
формуле: код_зашифрованного_символа
= код_символа
- (ключ + 1). Далее
производится
суммирование
всех
расшифрованных
кодов
символов, и
если эта
сумма
совпадает
по величине
с суммой
кодов
символов,
введенных с
клавиатуры,
то
программа
выдает
сообщение о
правильно
введенном
пароле.
Пароль
необходимо
создавать
размером не
менее 6, но и
не более 15
символов.
Более
объемные
пароли
неудобны в
использовании,
хранении и
обработке
программами.
Ход
работы:
/*Программная
дешифрация
пароля с
ключом,
хранящимся
в файле на
диске. Пароль
в
зашифрованном
виде
хранится в
файле на
диске*/ #include
<stdio.h> #include
<ctype.h> int
t, s, s1; int
f, e, i, ff1; int
ii,iii; main() { parol();
/*Функция
суммирования
кодов
символов,
вводимых с
клавиатуры*/ read_key();
/*Функция
чтения
ключа из
файла*/ deshifr_file();
/*Функция
дешифрации
пароля при
чтении из
файла*/ return
0; } parol()
/*Функция
суммирования
кодов
символов,
вводимых с
клавиатуры*/ { clrscr(); printf("(C),inn,2001\n"); printf("Дешифрация
пароля,
путем
чтения
зашифрованных
"); printf("символов
из файла\n и
их
преобразования
в коды ASCII "); printf("и
сравнения
сумм кодов
символов\n
считанных
из файла и с
клавиатуры\n"); printf("Введите
пароль: "); s1=0; while
((f=getchar())!='\n')/*Ввод
символов
пароля с
клавиатуры*/ { e=toascii(f);/*Преобразование
символов в ASCII
коды*/ printf("ASCII-код
символа (%c) = %d\n",f,e); s1=s1+e;/*Суммирование
чисел кода*/ } printf("\nСумма
кодов
символов,
введенных с
клавиатуры =
%d\n\n",s1); return
s1; } deshifr_file() /*Функция
дешифрации
пароля при
чтении из
файла*/ {
FILE
*fp; int
c; char
b; int
d, s; fp=fopen("c:\\parol.pwl",
"r"); if
((fp=fopen("c:\\parol.pwl", "r"))==NULL)/*Открытие
файла
на чтение*/ { printf("Не
могу
открыть
файл! Файл с
паролем не
существует!\n"); return
1; }
s=0; while((b=fgetc(fp))!=EOF)/*Чтение
символов из
файла*/ {
if
(b!=EOF) { if
(isascii(b)!=0) /*Если
символ есть
код ASCII то
выполняется
стандартное
преобразование*/ { c=toascii(b); printf("Зашифрованный
символ (%c) его
код = %d",b,c); } else
/*Иначе
прибавляется
к коду 128*/ { c=toascii(b)+128; printf("Зашифрованный
символ (%c) его
код = %d\n",b,c); }/*Преобразование
символов в ASCII
коды*/ ff1=c-i;/*Уменьшение
численной
величины
кода на
величину i, (расшифровывание
пароля)*/ printf(" Код
расшифрованного
символа = %d\n",ff1); i++;
/*Увеличение i
на единицу*/ s=s+ff1; } } fclose(fp); printf("\nСумма
кодов
расшифрованных
символов = %d\n",s); if
(s==s1)/*Сравнение
сумм кодов
из
введенного с
клавиатуры
пароля и
считанного
из файла*/ { printf("\nПароль
верный!\n"); printf("Выполнение
основного
блока
программы!"); delay(1500); } else
{ printf("\nПароль
не верный!
Попробуйте
еще раз!"); delay(1500); } return
0; } read_key()
/*Функция
чтения
ключа из
файла*/ { FILE
*fpp; char
*ii; fpp=fopen("c:\\s.key",
"r"); if
((fpp=fopen("c:\\s.key", "r"))==NULL)/*Открытие
файла
на чтение*/ { printf("Не
могу
открыть
файл! Файл с
ключом не
существует!\n"); return
1; } else {
ii=fgets(ii,'\n',fpp);/*Чтение
символов из
файла*/
i=atoi(ii);
/*Преобразование
строки в
число*/ } fclose(fpp); return
0; }
Контрольные
вопросы: 1.
Какой
принцип
используется
для
сравнения
паролей в
приведенном
примере? Как
взаимодействуют
программы
шифрации и
дешифрации
пароля? 2.
Какие
функции и
операторы С++
используются
для
дешифрации
пароля? Отчет
должен
содержать: 1.
Тему
работы, цель
работы. 2.
Распечатку
программы. 3.
Описание
хода
выполнения
работы и
письменные
ответы на
задания
хода работы. 4.
Ответы на
контрольные
вопросы. |