На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Просмотр таблиц в SQLite и MD5


Очень многие мои проекты связаны с базами данных. Это действительно удобно, причем зачастую используется не полноценный сервер баз данных, а его заменитель. Я уже рассказывал в нескольких статьях о SQLite, но в этой мы поговорим не в основном о программировании, а об инструментах – программе DB Browser for SQLite.

Для чего вообще пишутся программы, использующие базы данных? Чтобы заносить и удобно доставать оттуда информацию. Фильтры, поиск, удобное представление. Однако, создаваемые мной программы в большинстве случаев имеют жесткую структуру: несколько таблиц с заданными столбцами – поменять ничего нельзя. Одна из основных задач программиста – продумать эту структуру.

Создавать же структуру таблиц в базе данных удобно не в Visual Studio, а в сторонних программах. Конечно, там есть диаграммы баз данных, можно экспортировать/импортировать таблицы, менять ключи, менять значения – есть множество возможностей. Однако, студия нередко тормозит, подглючивает и все не особенно наглядно. Лично мне нравится работать со структурой и данными (если используется SQLite.) с помощью программы DB Browser for SQLite.

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



Можно сразу же заполнить поля – очень удобно. Не забудьте только нажать «Записать изменения» - я пару раз прокалывался на этом – ничего не сохранялось.

Теперь уже в студии напишем проверку поля при входе. Для простоты примера будем считать, что у нас только один пользователь.

  String passDB = "";

            using (var connection = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;"))
            {
                connection.Open();
                try
                {
                    using (SQLiteCommand command = new SQLiteCommand(connection))
                    {
                        command.CommandText = "SELECT * FROM users WHERE id = '1'";
                        SQLiteDataReader r = command.ExecuteReader();
                        r.Read();
                        passDB =  r["pass"].ToString();
                        r.Close();
                    }

                }

                catch (SQLiteException ex)
                {
                    MessageBox.Show("Error: " + ex.Message);
                }
                connection.Close();
            }

            var provider = System.Security.Cryptography.MD5.Create();
            string salt = "SfgTfrrd";
            string password = textBox1.Text;
            byte[] bytes = provider.ComputeHash(Encoding.ASCII.GetBytes(salt + password));
            string newPass = BitConverter.ToString(bytes);
            newPass = newPass.Replace("-", "");

            if (newPass == passDB)
            {
                Form2 fr = new Form2();
                this.Hide();
                fr.ShowDialog();
                this.Show();
            }

            else {
                MessageBox.Show("Пароль неверен!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
Что здесь у нас происходит? Код можно разделить на три части:

  • Ищем пароль в базе у пользователя с ид равным единице
  • Введенный пароль преобразовываем в хэш с солью (мы же не будем хранить секретные данные в открытом виде, верно?)
  • Сравниваем хэши: извлеченный из базы и введенный пользователем. Если все верно, то пускаем его в админку. Все просто, но эффективно. Взломать такую систему можно и в следующих статьях я покажу как и как защититься, но тема данной статьи немного другая.
Изменить пароль уже из админки также просто:

    //шифруем
            var provider = System.Security.Cryptography.MD5.Create();
            string salt = " SfgTfrrd ";
            string password = textBox1.Text;
            byte[] bytes = provider.ComputeHash(Encoding.ASCII.GetBytes(salt + password));
            string newPass = BitConverter.ToString(bytes);
            newPass = newPass.Replace("-", "");


            using (var connection = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;"))
            {
                connection.Open();
                try
                {
                    using (SQLiteCommand command = new SQLiteCommand(connection))
                    {
command.CommandText = "UPDATE users SET pass = @pass WHERE id='1'";
                        command.Parameters.Add("@pass", DbType.String).Value = newPass;
                        command.ExecuteNonQuery();
                    }

                    MessageBox.Show("Пароль успешно изменен!");
                }

                catch (SQLiteException ex)
                {
                    MessageBox.Show("Error: " + ex.Message);
                }
                connection.Close();
            }
Теперь данные у нас хранятся вот в таком виде в базе:



Таким образом, рекомендую удобную программку DB Browser for SQLite. Если вам нужна помощь по C# (.NET), необходимо написать программу на си шарп с базами данных или без, то вы можете обратиться за помощью ко мне. За небольшую сумму я вам с удовольствием помогу.



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, программирование, си шарп, SQLite, MD5





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Криптоджекинг (скрытый майнинг) может быть признаком более серьезного заражения
Как начинается работа с готовым сайтом


© upread.ru 2013-2020
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.