Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 68
.NET 4.x

Использование MD5 для проверки хэша пароля с MySQL

16.12.2017, 11:24. Показов 4168. Ответов 14

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане, у меня возникла такая проблема, надо чтобы пароль введенный в textbox шифровался в md5 и уже этот хэш отправлялся в запросе к MySQL. Заранее благодарю!
Версия MySQL 5.7.19, PHP 7.1.7
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2017, 11:24
Ответы с готовыми решениями:

Чтение MD5 пароля из MySQL базы
Пишу мост между сайтом и win программой. Пароли пользователей шифруются движком сайта методом md5. UPDATE `users` SET PASSWORD =...

Вычисление md5-хэша файла
Привет всем! Надо понять, изменился файл или нет. Анализ даты и версии не подходит. нужен только хэш. Хотелось бы что-то родное, на...

Генерация MD5-хэша в программе
как записать в прогу такое выражение мол чтобы прога знала что: мд5 от tb1+tb2+tb3+tb4=такой-та мд5 ну итд........ Добавлено через...

14
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18264 / 14189 / 5366
Регистрация: 17.03.2014
Сообщений: 28,877
Записей в блоге: 1
16.12.2017, 17:01
AlphaShaq, что именно не получается?

P.S. MD5 это очень плохой выбор для хранения паролей. Лучше использовать PBKDF2 или bcrypt.
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 68
16.12.2017, 17:47  [ТС]
Раз уж MD5 плох, то как сделать с PBKDF2 или bcrypt, чтобы еще MySQL это понимала?
И еще как сменить MD5 на другой аналог в MySQL
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18264 / 14189 / 5366
Регистрация: 17.03.2014
Сообщений: 28,877
Записей в блоге: 1
16.12.2017, 17:55
AlphaShaq, опиши сначала задачу полнее. Что уже сделано? Как PHP здесь участвует?
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 68
16.12.2017, 18:02  [ТС]
Мне нужно чтобы лаунчер хэшировал пароль, который вводит пользователь в в textBox, отправлял его как mysql команду, и если хэш совпадает, то вход удался, если нет, то пишет ошибку. Пользуюсь временно CMS dle

вот часть авторизации без хэширования
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
                const string myConnectionString = "server=localhost;user id=Launcher;password=SFdksfdsjhfds;persistsecurityinfo=True;database=Test";
                bool auth = false;
                using (MySqlConnection myConnection = new MySqlConnection(myConnectionString))
                {
                    MySqlCommand com = new MySqlCommand("SELECT COUNT(*) FROM _users WHERE name=@login AND password=@password");
                    /* !!! */
                    com.Connection = myConnection;
                    com.Parameters.AddWithValue("@login", LoginTXT.Text);
 
                    com.Parameters.AddWithValue("@password", PassTXT.Text);
                    myConnection.Open();
                    auth = (long)com.ExecuteScalar() == 1;
 
                }
 
                if (auth)
                {
                    APanle.Visible = false;
 
                }
                else
                {
                    Error.Visible = true;
                }
            }
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18264 / 14189 / 5366
Регистрация: 17.03.2014
Сообщений: 28,877
Записей в блоге: 1
16.12.2017, 18:51
AlphaShaq, 1) добавляем в таблицу _users колонку passwordHash varchar(200) NULL,

2) добавляем в проект класс PBKDF2HashHelper.

3) выполняем один раз следующий код который создаст PBKDF2 хеши из паролей, после чего удаляем колонку password и делаем колонку passwordHash -> NOT NULL.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const string myConnectionString = "server=localhost;user id=Launcher;password=SFdksfdsjhfds;persistsecurityinfo=True;database=Test";
 
static void HashPasswords()
{
    using (MySqlConnection myConnection = new MySqlConnection(myConnectionString))
    {
        MySqlCommand selectCmd = new MySqlCommand("SELECT name, password FROM _users", myConnection);
        myConnection.Open();
 
        using (MySqlDataReader dataReader = selectCmd.ExecuteReader())
        {
            while (dataReader.Read())
            {
                string name = (string)dataReader["name"];
                string password = (string)dataReader["password"];
                string passwordHash = PBKDF2HashHelper.CreatePasswordHash(password);
 
                MySqlCommand updateCmd = new MySqlCommand("UPDATE _users SET passwordHash=@passwordHash WHERE name=@name AND password=@password", myConnection);
                updateCmd.Parameters.AddWithValue("@name", name);
                updateCmd.Parameters.AddWithValue("@password", password);
                updateCmd.Parameters.AddWithValue("@passwordHash", passwordHash);
                updateCmd.ExecuteNonQuery();
            }
        }
    }
 
    return PBKDF2HashHelper.VerifyPassword(PassTXT.Text, passwordHash);
}
Если в таблице есть первичный ключ, то перепиши SELECT/UPDATE запрос с учетом его, чтобы UPDATE-ы быстрее отработали.

4) Пишем код аутентификации:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void buttonLogin_Click(object sender, EventArgs e)
{
    APanle.Visible = ValidateLoginPassword(LoginTXT.Text, PassTXT.Text);
}
 
const string myConnectionString = "server=localhost;user id=Launcher;password=SFdksfdsjhfds;persistsecurityinfo=True;database=Test";
 
static bool ValidateLoginPassword(string login, string password)
{
    if (string.IsNullOrWhitespace(login) || string.IsNullOrWhitespace(password)) return false;
 
    string passwordHash;
    using (MySqlConnection myConnection = new MySqlConnection(myConnectionString))
    {
        MySqlCommand com = new MySqlCommand("SELECT passwordHash FROM _users WHERE name=@login", myConnection);
        com.Parameters.AddWithValue("@login", login);
        myConnection.Open();
        passwordHash = (string)com.ExecuteScalar();
    }
 
    return PBKDF2HashHelper.VerifyPassword(password, passwordHash);
}
Добавлено через 2 минуты
С советом удалить колонку password я наверное перегнул. Она же используется CMS? Если да, то не надо её удалять. Тогда правда нужно подумать о внесении изменений в CMS чтобы она тоже использовала колонку passwordHash.
1
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 68
17.12.2017, 02:43  [ТС]
Я изменил у CMS способ хэширования, сделал все как вы сказали, но я так как полный утюг, я не могу понять, как сделать все тоже самое, но без passwordHash.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18264 / 14189 / 5366
Регистрация: 17.03.2014
Сообщений: 28,877
Записей в блоге: 1
17.12.2017, 10:18
AlphaShaq, вместо самоунижения лучше было бы выложить схему таблицы пользователей из CMS и привести пимер данных из нее.
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 68
17.12.2017, 10:25  [ТС]
Пере задам вопрос: Как обойтись без passwordHash. то есть без этих строк
C#
1
return PBKDF2HashHelper.VerifyPassword(password, [B]passwordHash[/B]);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18264 / 14189 / 5366
Регистрация: 17.03.2014
Сообщений: 28,877
Записей в блоге: 1
17.12.2017, 10:30
AlphaShaq, зачем?
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 68
17.12.2017, 10:40  [ТС]
Она не будет использоваться, так как пароль в таблице mysqlкэшируеться в PBKDF2
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18264 / 14189 / 5366
Регистрация: 17.03.2014
Сообщений: 28,877
Записей в блоге: 1
17.12.2017, 10:48
AlphaShaq, если бы в MySQL была бы встроенная функция хеширования PKDF2, то тогда бы ни переменная passwordHash ни класс PBKDF2HashHelper не были бы нужны. Но т.к. её нет, то она нужна. Понадобится только переделать код проверки пароля с учетом того как CMS хранит хеш и соль (salt) для пароля.

Цитата Сообщение от AlphaShaq Посмотреть сообщение
кэшируеться в PBKDF2
Хешируется, а не кешируется.
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 68
17.12.2017, 10:52  [ТС]
Как я понял, у меня CMS хэширует в PBKDF2 (шаманял с пхп), мне не хватает чтоб проверка password шла тоже через PBKDF2.
Р.S. т9 исправил.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18264 / 14189 / 5366
Регистрация: 17.03.2014
Сообщений: 28,877
Записей в блоге: 1
17.12.2017, 11:35
AlphaShaq, я уже ответил - нужно переделать код чтения из БД и код класса PBKDF2HashHelper в соответствии с тем как CMS хранит данные.
0
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 68
17.12.2017, 11:38  [ТС]
Ладно, спасибо, разберусь надеюсь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2017, 11:38
Помогаю со студенческими работами здесь

Получение MD5 хэша файла
Никак не могу разобраться в многочисленных примерах, как реализовать получение хэш суммы MD5 файла, хэш текста получить могу, а файла нет:(

Расчёт md5-хэша файла
Здраствуйте! Есть программа по поиску дубликатов файлов. В интерфейсе можно указать галочку одинаковое содержимое и тогда подключается...

Расшифровка хэша md5: возможно ли. И если невозможно, то почему
Здравствуйте, знатоки c# и просто бывалые пользователи форума! Вот в последние время интересует один вопрос... Как посредством c#...

Подскажите что такое md5 шифрование пароля и для чего оно надо ?
Подскажите что такое md5 шифрование пароля и для чего оно надо ?

Безопасное получение хэша пароля, заданного через указатель из SecureString
Итак в продолжение темы "Как работать с SecureString?" вопрос следующий: как рассчитать md5-хэш из указателя IntPtr или обычного unsafe...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru