PDA

Просмотр полной версии : [Вопрос] Различия в хэшировании md5



_lizard
12.07.2016, 18:25
Появилась проблема. Допустим, у меня есть сочетание "тест_00110", которое мне нужно записать в базу данных в зашифрованном виде (md5).

Выполняю запрос:

mysql_query(mysql_connection, "INSERT INTO `table` (`hash_text`) VALUES (MD5('тест_00110'))");

Что появилось в базе данных: a2a567b882221b794b8b6e54fb672808

Ввожу тот же текст (тест_00110) в сайты онлайн-хэширования, все они выводят это: 9491092E40E23C1960AC95BCBEF0ED18

Не могу понять, почему хэши получаются разные..

_lizard
12.07.2016, 22:14
Сделал вместо MD5 в запросе SHA2 - тоже самое, сайты показывают совершенно другой хэш, а также заметил, что такая же ситуация с функцией SHA256_PassHash..

123
13.07.2016, 08:11
Только что попробовал - все работает правильно, на выходе получается хэш 9491092e40e23c1960ac95bcbef0ed18
Сам сейчас использую SHA-2 с солью, все работает хорошо.

_lizard
13.07.2016, 11:05
Может я делаю что-то не так?


new query[200], string[11] = "это_тест01";
mysql_format(mysql_connection, query, sizeof(query), "INSERT INTO `accounts` (`password`) VALUES (MD5('%s'))", string);
mysql_function_query(mysql_connection, query, false, "", "");
База данных:

http://i.imgur.com/fLfc55j.png
Сайты онлайн-хэширования:
http://i.imgur.com/d2ZWaQI.png

http://i.imgur.com/w5pyxZW.png

ziggi
13.07.2016, 11:35
Твоя строка в MySQL идёт в кодировке cp1251, на сайтах онлайн хеширования, как правило, используется UTF-8.
Это можно легко проверить зайдя на один из этих сайтов и принудительно установить кодировку cp1251 (Windows-1251), результат хэширования строки "это_тест01" будет аналогичным результату твоего запроса в БД.

_lizard
13.07.2016, 12:17
Твоя строка в MySQL идёт в кодировке cp1251, на сайтах онлайн хеширования, как правило, используется UTF-8.
Это можно легко проверить зайдя на один из этих сайтов и принудительно установить кодировку cp1251 (Windows-1251), результат хэширования строки "это_тест01" будет аналогичным результату твоего запроса в БД.

Эм, кодировка должна меняться в функционале сайтов или браузере? затупил(

ziggi
13.07.2016, 13:57
Эм, кодировка должна меняться в функционале сайтов или браузере? затупил(

Можешь поменять в браузере:
http://ihost.pro-pawn.ru/image.php?dt=0UXK (http://ihost.pro-pawn.ru/?pt=0UXK)


Чтобы исправить в скрипте, тебе нужно установить кодировку UTF-8 с БД с помощью функции mysql_set_charset.

Geebrox
13.07.2016, 14:20
Чтобы исправить в скрипте, тебе нужно установить кодировку UTF-8 с БД с помощью функции mysql_set_charset.

Я думаю лучше этого не делать, ибо потом будет не соответствие кодировок. Возникнут вопросы типа "Почему русские шрифты отображаются как карякулы" и т.д.

По теме:

Как уже ziggi ответил это из за разной кодировки. У тебя обязательно должны совпадать хэши с бд и с сайтами?

_lizard
13.07.2016, 14:35
У тебя обязательно должны совпадать хэши с бд и с сайтами?

Ну желательно, имеется связь с сайтом

Geebrox
13.07.2016, 14:57
Ну желательно, имеется связь с сайтом

тогда напиши для сайта php скрипт, который будет получать с базы пароль с win1251 кодировкой потом дехэш, далее изменит кодировку результата в UTF-8

_lizard
13.07.2016, 15:00
тогда напиши для сайта php скрипт, который будет получать с базы пароль с win1251 кодировкой потом дехэш, далее изменит кодировку результата в UTF-8

Да, подумаю об этом. Просто боюсь, если что-то пойдёт не так, то на всех аккаунтах просто полетят пароли :(

ziggi
13.07.2016, 16:43
Я думаю лучше этого не делать, ибо потом будет не соответствие кодировок. Возникнут вопросы типа "Почему русские шрифты отображаются как карякулы" и т.д.

Не соответствие кодировок уже есть, поэтому это лучше сделать. Да, придётся немного всё настроить, но это избавит от возможных проблем в будущем. Небольшой гайд настройке и использовании MySQL можно посмотреть здесь (http://forum.sa-mp.com/showthread.php?t=489467).