Блокнот с графичиским ключом [C#, WinForms]

Задание на программу:

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

Описание программы:

Разработанная программа представляет из себя связку программы (WinForms, C#) + локальная база данных (SQLite).

Методы шифрования:

Логин и пароль шифруются с помощью метода MD5 и хранятся в базе в таком же виде. Графический ключ в виде списка координат так же шифруется с помощью метода гаммирования и записывается в базу данных.

Содержание отчёта (12 страниц):

  • Введение 3
  • Цель работы 4
  • Функциональные возможности 4
  • Математические методы и алгоритмы решения задач 5
  • Ограничения 5
  • Руководство пользователя 6
  • Алгоритм работы программы 8
  • Результаты работы программы 10
  • Выводы 12

Содержание архива:

  • папка с исходным проектом в Visual Studio 2019 и базой данных;
  • отчёт по программе.

Дополнительно:

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

При первом запуске может потребоваться пересобрать проект, чтобы подтянулись необходимы библиотеки. Нажать в верху студии в меню Средства -> Диспетчер пакетов NuGet -> Консоль диспетчера пакетов. Написать в открывшемся окне: update-package -reinstall. Можно использовать ))

Фрагмент программного кода:

private void btnReg_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtLogin.Text.Trim()))
            {
                MessageBox.Show("Введите логин");
                return;
            }

            if (string.IsNullOrEmpty(txtPassword.Text.Trim()))
            {
                MessageBox.Show("Введите логин");
                return;
            }

            if (_points.Count == 0)
            {
                MessageBox.Show("Заполните графический ключ");
                return;
            }

            var login = Convert.ToBase64String(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(txtLogin.Text.Trim())));
            var passwordHash = Convert.ToBase64String(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(txtPassword.Text.Trim())));

            using (var command = _connection.CreateCommand())
            {
                command.CommandText = "SELECT * FROM 'User' WHERE Login = @login";
                command.Parameters.Add("@login", DbType.String).Value = login;
                var count = command.ExecuteScalar();

                if (count == DBNull.Value || count == null || Convert.ToInt32(count) == 0)
                {                    
                    var accutacy = (int)numAccuracy.Value;
                    var image = ImageToBytes(picKey.Image);
                    var data = Crypt.Gamming(JsonConvert.SerializeObject(new ImageData(accutacy, _points)), login);

                    // Insert image
                    command.CommandText = "INSERT INTO 'Image' (Image, Data) VALUES(@image, @data)";
                    command.Parameters.Add("@image", DbType.Binary).Value = image;
                    command.Parameters.Add("@data", DbType.String).Value = data;
                    command.ExecuteNonQuery();

                    command.CommandText = "select last_insert_rowid()";
                    var imageID = Convert.ToInt32(command.ExecuteScalar());

                    // Insert User with reference to Image
                    command.CommandText = "INSERT INTO 'User' (Login, PasswordHash, ImageID) VALUES(@login, @passwordHash, @imageID)";
                    command.Parameters.Add("@login", DbType.String).Value = login;
                    command.Parameters.Add("@passwordHash", DbType.String).Value = passwordHash;
                    command.Parameters.Add("@imageID", DbType.Int32).Value = imageID;
                    var result = command.ExecuteNonQuery();

                    MessageBox.Show($"Пользователь {txtLogin.Text} успешно зарегестрирован!");
                    this.Close();
                }
                else if (Convert.ToInt32(count) != 0)
                {
                    MessageBox.Show("Пользователь с таким именем уже существует");
                }
            }
        }

Купить

300,00 

(без учета комиссии 3,8 %)

После оплаты Вы получите работу на электронную почту.
SecureNotepad.rar
538320
Оцени работу

рейтинг

Поделись работой с друзьями

Мы не грузим циферки, чтоб ты увидел контент как можно быстрее;

Комментарии (0)

kostyaLem

/ /

Оставить комментарий

Ты не можешь комментировать

Только зарегестрированые пользователи имеют возможность комментировать работы
Блокнот с графичиским ключом [C#, WinForms]
Задание на программу: Необходимо разработать программный продукт, представляющий собой Блокнот с двухфакторной авторизацией, один элемент из которой представляет собой графический ключ. Описание программы: Разработанная программа представляет из себя связку программы (WinForms, C#) + локальная база данных (SQLite).
Категория: Образование
Стоимость: 300,00