БФИ2203_ОИБ_Лаб№2_Вар№8
.docxМинистерство цифрового развития, связи и массовых коммуникаций РФ ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ»
Кафедра «Информационная безопасность»
Отчет по лабораторной работе № 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 – Пользователь добавлен в базу данных
Вывод: в результате выполнения работы были изучены технологии аутентификации пользователя на основе пароля.
