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