Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

БФИ2203_ОИБ_Лаб№2_Вар№8

.docx
Скачиваний:
0
Добавлен:
02.08.2026
Размер:
1 Мб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций РФ ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ»

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

Отчет по лабораторной работе № 2

по дисциплине «Основы информационной безопасности»

«Методы парольной защиты. Разработка программной парольной защиты»

Вариант № 8

Выполнили:

студенты группы БФИ №2203

Козлова Я.В.

Мячина Л.А.

Москва, 2023 г.

Цель работы: изучение технологии аутентификации пользователя на основе пароля.

Задача: разработать программу, представляющую собой форму доступа к определённым информационным ресурсам на основе пароля.

• В качестве информационного ресурса использовать любой файл или приложение.

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

• В системе должна храниться следующая информация о пользователе: ID или имя пользователя, пароль, ФИО, дата рождения, место рождения (город), номер телефона.

• Пользователь должен иметь возможность поменять пароль.

• Длина пароля составляет 10 символов, используются цифры и знаки препинания. При смене пароля: проверка на совпадение пароля с датой рождения пользователя.

Ход работы:

Для выполнения лабораторной работы мы будем использовать WinForms в Visual Studio.

1. С помощью пакета MAMP создали базу данных oib2 и таблицу users, заполнили данные для 2 пользователей (рисунок 1).

Рисунок 1 – Таблица users

2. Создали новый проект в Visual Studio, добавили класс DB.cs для подключения к базе данных (рисунок 2).

Рисунок 2 – Подключение к базе данных

3. Создали форму для авторизации уже зарегистрированных пользователей. Код формы:

using MySql.Data.MySqlClient;

using System;

using System.Data;

using System.Windows.Forms;

namespace OIB2

{

public partial class Form1 : Form

{

private static String login;

private String pass;

public Form1()

{

InitializeComponent();

}

private void button2_Click(object sender, EventArgs e)

{

login = textBox1.Text;

pass = textBox2.Text;

DB db = new DB();

DataTable table = new DataTable();

MySqlDataAdapter adapter = new MySqlDataAdapter();

MySqlCommand command = new MySqlCommand("SELECT * FROM `users` WHERE `login` = @l AND `pass` = @up", db.getConnection());

command.Parameters.Add("@l", MySqlDbType.VarChar).Value = login;

command.Parameters.Add("@up", MySqlDbType.VarChar).Value = pass;

adapter.SelectCommand = command;

adapter.Fill(table);

if (table.Rows.Count > 0)

{

MessageBox.Show("Пользователь найден", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);

Form3 x = new Form3();

this.Hide();

x.ShowDialog();

}

else

MessageBox.Show("Пользователь не найден", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

private void button1_Click(object sender, EventArgs e)

{

Form2 x = new Form2();

this.Hide();

x.ShowDialog();

}

private void textBox2_KeyPress(object sender, KeyPressEventArgs e)

{

e.Handled = (!char.IsDigit(e.KeyChar) && !char.IsPunctuation(e.KeyChar) && e.KeyChar != '\b') ? true : false;

}

public static String getLogin()

{

return login;

}

}

}

4. Создали форму для регистрации новых пользователей. Код программы:

using MySql.Data.MySqlClient;

using System;

using System.Windows.Forms;

namespace OIB2

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

private void button2_Click(object sender, EventArgs e)

{

if (textBox8.Text == "")

{

MessageBox.Show("Вы не ввели значение", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox1.Text == "")

{

MessageBox.Show("Вы не ввели значение", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox2.Text == "")

{

MessageBox.Show("Вы не ввели значение", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox3.Text == "")

{

MessageBox.Show("Вы не ввели значение", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox4.Text == "")

{

MessageBox.Show("Вы не ввели значение", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox5.Text == "")

{

MessageBox.Show("Вы не ввели значение", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox6.Text == "")

{

MessageBox.Show("Вы не ввели значение", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox7.Text == "")

{

MessageBox.Show("Вы не ввели значение", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox6.Text.Length < 11)

{

MessageBox.Show("Номер телефона должен содержать 11 символов", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

if (textBox7.Text.Length < 10)

{

MessageBox.Show("Пароль должен содержать 10 символов", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

DB db = new DB();

MySqlCommand command = new MySqlCommand("INSERT INTO `users` (`login`, `Pass`, `Surname`, `Name`, `Patronymic`, `Date`, `Place`, `Number`) VALUES (@l, @pass, @s, @n, @p, @d, @c, @num)", db.getConnection());

command.Parameters.Add("@l", MySqlDbType.VarChar).Value = textBox8.Text;

command.Parameters.Add("@pass", MySqlDbType.VarChar).Value = textBox7.Text;

command.Parameters.Add("@s", MySqlDbType.VarChar).Value = textBox1.Text;

command.Parameters.Add("@n", MySqlDbType.VarChar).Value = textBox2.Text;

command.Parameters.Add("@p", MySqlDbType.VarChar).Value = textBox3.Text;

command.Parameters.Add("@d", MySqlDbType.Date).Value = textBox4.Text;

command.Parameters.Add("@c", MySqlDbType.VarChar).Value = textBox5.Text;

command.Parameters.Add("@num", MySqlDbType.UInt64).Value = textBox6.Text;

db.openConnection();

try

{

if (command.ExecuteNonQuery() == 1)

{

MessageBox.Show("Аккаунт создан", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);

Form3 x = new Form3();

this.Hide();

x.ShowDialog();

}

else

MessageBox.Show("Аккаунт не был создан", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);

db.closeConnection();

}

catch (Exception ex)

{

MessageBox.Show("Ошибка: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

private void textBox6_KeyPress(object sender, KeyPressEventArgs e)

{

e.Handled = (char.IsDigit(e.KeyChar)) ? false : (((Keys)e.KeyChar) != Keys.Back);

}

private void textBox7_KeyPress(object sender, KeyPressEventArgs e)

{

e.Handled = (!char.IsDigit(e.KeyChar) && !char.IsPunctuation(e.KeyChar) && e.KeyChar != '\b') ? true : false;

}

private void textBox7_TextChanged(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

Form1 x = new Form1();

this.Hide();

x.ShowDialog();

}

private void textBox4_KeyPress(object sender, KeyPressEventArgs e)

{

e.Handled = (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.');

}

}

}

5. Создали форму для смены пароля. Код программы:

using MySql.Data.MySqlClient;

using System;

using System.Data;

using System.Windows.Forms;

namespace OIB2

{

public partial class Form3 : Form

{

public Form3()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Application.Exit();

}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{

e.Handled = (!char.IsDigit(e.KeyChar) && !char.IsPunctuation(e.KeyChar) && e.KeyChar != '\b') ? true : false;

}

private void textBox2_KeyPress(object sender, KeyPressEventArgs e)

{

e.Handled = (!char.IsDigit(e.KeyChar) && !char.IsPunctuation(e.KeyChar) && e.KeyChar != '\b') ? true : false;

}

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)

{

e.Handled = (!char.IsDigit(e.KeyChar) && !char.IsPunctuation(e.KeyChar) && e.KeyChar != '\b') ? true : false;

}

private void button2_Click(object sender, EventArgs e)

{

DB db = new DB();

db.openConnection();

MySqlCommand command = new MySqlCommand("UPDATE `users` SET `Pass` = @p WHERE `users`.`login` = @l;", db.getConnection());

command.Parameters.Add("@p", MySqlDbType.VarChar).Value = textBox2.Text;

command.Parameters.Add("@l", MySqlDbType.VarChar).Value = Form1.getLogin();

MySqlDataAdapter adapter = new MySqlDataAdapter();

MySqlCommand command2 = new MySqlCommand("SELECT Date FROM `users` WHERE `users`.`login` = @lo;", db.getConnection());

command2.Parameters.Add("@lo", MySqlDbType.VarChar).Value = Form1.getLogin();

adapter.SelectCommand = command2;

DataTable table = new DataTable();

adapter.Fill(table);

string dateValue = table.Rows[0]["Date"].ToString();

string year = dateValue.Substring(6, 4);

string month = dateValue.Substring(3, 2);

string day = dateValue.Substring(0, 2);

string formattedDate = year + "-" + month + "-" + day;

string t2 = textBox2.Text.Replace(".", "-");

string t3 = textBox2.Text.Replace("/", "-");

if (formattedDate == textBox2.Text || formattedDate == t2 || formattedDate == t3)

{

MessageBox.Show("Пароль не должен совпадать с датой рождения", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

textBox2.Clear();

textBox3.Clear();

return;

}

if (textBox2.Text.Length < 10)

{

MessageBox.Show("Пароль должен содержать 10 символов", "Вывод", MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

try

{

if (command.ExecuteNonQuery() == 1 && textBox2.Text == textBox3.Text && dateValue != textBox2.Text)

{

MessageBox.Show("Пароль изменен", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);

textBox1.Clear();

textBox2.Clear();

textBox3.Clear();

}

else

{

MessageBox.Show("Пароль не был изменен", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);

textBox1.Clear();

textBox2.Clear();

textBox3.Clear();

}

}

catch (Exception ex)

{

MessageBox.Show("Ошибка: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

finally

{

db.closeConnection();

}

}

}

}

Результат работы программы (рисунки 3-9):

Рисунок 3 – Запуск программы, окно авторизации

Рисунок 4 – Ввод данных из базы данных

Рисунок 5 – Попытка изменить пароль, на совпадающий с датой рождения

Рисунок 6 – Успешное изменение пароля

Рисунок 7 – Форма регистрации

Рисунок 8 – успешная регистрация пользователя

Рисунок 9 – Пользователь добавлен в базу данных

Вывод: в результате выполнения работы были изучены технологии аутентификации пользователя на основе пароля.