Индивидуальное задание № 2

Тема: "Создание простого текстового редактора"

 

Создайте форму, которая будет появляться по центру экрана с фиксированными границами и без кнопок сворачивания и разворачивания окна. Задайте значок иконки для окна. В заголовке формы отображается количество попыток, которое осталось у пользователя для ввода пароля.

 

 

 

Окно предназначено для регистрации пользователя в программе. Пользователю необходимо ввести имя и фамилию, а также пароль, разбитый на 8 частей по 4 символа в каждой. Все поля в форме должны поддерживать автоматический переход в следующее поле при вводе 4 символов. Сам пароль пользователь не должен видеть (отображать символ *). Пароль генерируется с помощью MD5 хеширования по ключевому слову (см. ниже).

По кнопке "ОК" сначала проверяется, заполнил ли пользователь поля Фамилия и Имя. Если нет, то выдается сообщения и курсор переходит в незаполненное поле.

Потом проверяется введенный пароль согласно варианту. В случае неверного ввода пароля должно выдаваться сообщения об ошибке и пользователь должен снова ввести его (при этом курсор автоматически становится на первое поле ввода). В случае неверного ввода пароля N раз ( N-число попыток ввода, см. свой вариант) приложение блокируется (вид блокировки см. в своем варианте) и продолжение работы с программой становится невозможным.

В случае верного ввода пароля происходит вход в систему и пользователь получает доступ к форме для работы с текстом. Форма должна отображаться по центру экрана и поддерживать масштабирование элементов на ней. Задайте значок иконки для формы. В заголовке окна необходимо отобразить текст, который информирует о пользователе системы (см. свой вариант). На форме разместите меню с набором команд: Файл (Открыть, Сохранить..., Выход), Правка (Вырезать, Копировать, Вставить. Выделить все), Формат (команды согласно варианту), О программе. Для каждой команды меню задайте иконку и произвольное сочетание клавиш. Напишите код для работы каждой команды.

Нанесите на форму многострочное текстовое поле и панель инструментов с дублированием всех команд меню.

Команда "О программе" открывает новую форму с информациоей о разработчике и номере варианта. Отобразите флорму "О программе" как заставку при запуске программы.

 

Варианты заданий 

 

№ по списку

Слово для генерирования пароля

Количество попыток введения

Вид блокировки

Заголовок окна

Команды в меню Формат

1

ppr_pass

2

заблокировать кнопку "ОК" и на ней вывести текст "Ошибка"

Работает: Фамилия Имя

Шрифт, цвет фона в поле

2

pks_pass

3

спрятать два первых текстовых поля и на их месте вывести текст "Ошибка"

Привет пользователю: Имя

Шрифт, цвет текста

3

ppr_password

4

спрятать поля "Фамилия" и "Имя", на их месте выдать сообщение "Ошибка" и заблокировать кнопку "ОК"

 Добро пожаловать: Фамилия первая буква имени

Шрифт, цвет фона в поле

4

pks_password

1

выдать сообщение о последней попытке, заблокировать кнопку "ОК" и на ней написать "Ошибка"

Открыт сеанс для: Фамилия Имя

Шрифт, цвет текста

5

PprPass

3

спрятать последние два текстовых поля и на их месте вывести текст "Ошибка"

Добрый день: Имя Фамилия

Шрифт, цвет фона в поле

6

PksPass

4

выдать сообщение о последней попытке, на месте поля "Имя" вывести текст "Ошибка"

Текущий пользователь: Фамилия

Шрифт, цвет текста

7

PprPassword

3

спрятать кнопку "ОК" и на ее месте вывести текст "Ошибка"

Регистрация для: Фамилия первая буква имени

Шрифт, цвет фона в поле

8

PksPassword

4

выдать сообщение о последней попытке,  спрятать кнопку "ОК" и на ее месте вывести текст "Ошибка"

Работу проводит: Фамилия

Шрифт, цвет текста

9

pass_ppr

2

спрятать все текстовые поля и на их месте вывести текст "Ошибка"

Текущий сеанс: Имя

Шрифт, цвет фона в поле

10

pass_pks

2

заблокировать кнопку "ОК" и в заголовке окна выдать сообщение о блокировании

Будем знакомые: первая буква имени Фамилия

Шрифт, цвет текста

11

password_ppr

4

заблокировать все текстовые поля, в заголовке окна вывести сообщение о блокировании

Программа открыта для: Фамилия Имя

Шрифт, цвет фона в поле

12

password_pks

3

спрятать все элементы на форме ( кроме кнопки "Отмена") вывести сообщение "Ошибка"

Привет: Имя Фамилия

Шрифт, цвет текста

13

PassPpr

5

выдать сообщение о последней попытке, на месте поля "Имя" вывести текст "Ошибка"

Регистрация для: Фамилия первая буква имени

Шрифт, цвет фона в поле

14

PassPks

4

заблокировать кнопку "ОК" и в заголовке окна выдать сообщение о блокировании

Работу проводит: Фамилия

Шрифт, цвет текста

15

PasswordPpr

3

выдать сообщение о последней попытке, заблокировать кнопку "ОК" и на ней написать "Ошибка"

Текущий пользователь: Фамилия

Шрифт, цвет фона в поле

16

PasswordPks

2

спрятать все элементы на форме ( кроме кнопки "Отмена") , вывести сообщение "Ошибка"

Текущий сеанс: Имя

Шрифт, цвет текста

17

PprPasS

3

спрятать кнопку "ОК" и на ее месте вывести текст "Ошибка"

Добрый день: Имя Фамилия

Шрифт, цвет фона в поле

18

PksPasS

5

заблокировать все текстовые поля, в заголовке окна вывести сообщение о блокировании

Будем знакомы: первая буква имени Фамилия

Шрифт, цвет текста

19

 PprPassworD

4

заблокировать кнопку "ОК" и на ней вывести текст "Ошибка"

Открыт сеанс для: Фамилия Имя

Шрифт, цвет фона в поле

20

PksPassworD

2

выдать сообщение о последней попытке,  спрятать кнопку "ОК" и на ее месте вывести текст "Ошибка"

Программа открыта для: Фамилия Имя

Шрифт, цвет текста

21

PasSPpr

3

спрятать все элементы на форме ( кроме кнопки "Отмена"), вывести сообщение "Ошибка"

 Добро пожаловать: Фамилия первая буква имени

Шрифт, цвет фона в поле

22

PasSPks

3

спрятать поля "Фамилия" и "Имя", на их месте выдать сообщение "Ошибка" и заблокировать кнопку "ОК"

Привет: Имя Фамилия

Шрифт, цвет текста

23

PassworDPpr

4

спрятать все текстовые поля и на их месте вывести текст "Ошибка"

Привет пользователю: Имя

Шрифт, цвет фона в поле

24

PasswordPks

5

спрятать два первых текстовых поля и на их месте вывести текст "Ошибка"

Будем знакомые: первая буква имени Фамилия

Шрифт, цвет текста

25

PpRpAsS

3

спрятать последние два текстовых поля и на их месте вывести текст "Ошибка"

Работает: Фамилия Имя

Шрифт, цвет фона в поле

 

Генерация пароля с помощью MD5 хеширования

 

Рассмотренный в практическом занятии № 3 пример задания пароля имеет недостаток, связанный с тем, что пользователь вводит в поле сам текст пароля без шифрования. Если на компьютере будет установлена шпионския программа, которая перехватывает нажатия клавиш, то такой пароль будет похищен. Для защиты пароля рекомендуется ключевое слово шифровать с помощью специальных алгоритмов и вводить именно зашифрованный текст. Одним из распротраненных и мощных алгоритмов шифрования является метод хеширования MD5. Его суть заключается в том, что из исходной текстовой строки получается некоторый набор из 32 символов, который будет вводиться как пароль. При этом обратная расшифровка не возможна. То есть зная сгенерированный набор символов, не возможно получить исходный текст пароля.

В языке C# есть встроенные алгоритмы шифрования, одним из которых является алгоритм MD5. Для удобства использования данного алгоритма я оформил его в виде метода отдельного класса, который вам нужно скачать, подключить и использовать.

Скачайте файл класса с алгоритмом MD5 хэширования. Если вы откроете этот файл, то увидите, что данный класс имеет метод GetHash(string input), для которого в качестве аргумента вызова нужно указать ключевое слово, из которого будет получаться хэш-последовательность.

Для использования созданного файла класса в вашем проекте в окне "Обозреватель решений" вызовите контекстное меню проекта и выберите команду "Добавить - Существующий элемент"и укажите файл скачанного класса. В результате в структуре вашего проекта должен появиться новый файл класса MD5.cs Откройте файл класса и убедитесь, что его название пространства имен namespace ... совпадает с названием пространстсва имен класса формы namespace ... Если это не так, то поменяйте в файле добавленного класса название пространства имен на нужное.

Для шифрования по указанному алгоритму нужно внести изменения в код проверки пароля.

 

Пусть имеется 8 полей по 4 символа для ввода пароля. Сам пароль - это Md5 хэш ключевого слова "primer". Необходимо, чтобы пользователь вводил зашифрованное значение пароля, и программа проверяла его правильность.

 

if (textBox1.Text+textBox2.Text+...+textBox8.Text==Md5.GetHash('primer')) then

    //пароль правильный

 

Слово 'primer', зашифрованное с помощью MD5 хеширования, будет иметь вид '6f9bdde59212bf772c41648d1b2eb072'. Именно это текст будет вводить пользователь как пароль. Если злоумышленник перехватит вводимый текст, то обратное преобразование будет не возможно. Слово 'primer' ему получить не удастся.