Просмотр таблиц в 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.