Просмотр таблиц в 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




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




Недорогие смс
9 советов для разработчиков JavaScript
Совпадение стилей, или решение проблемы с OpenCart