Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±

    Упакованный хеш

    Как-то наткунулся на тему от Daniel_Cortez про упаковку хеша SHA256. Всё тщательно изучил и реализовал. Проблема возникает при сохранении упакованного хеша в базе данных. После сохранение и загрузки упакованного хеша в переменную, оно полностью меняется. После чего игрок не может пройти авторизацию. Вопрос, вообще можно ли сохранять такие строки в базе данных, просто после упаковки они становятся иероглифами. Примечание, в базе данных кодировка UTF-8.
    Последний раз редактировалось Geebrox; 27.05.2018 в 21:39.

  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Может быть немного скринов и кода?

  3. #3
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Тему можно закрывать, решение не найдено.
    Альтернативное решение: использовать UNHEX для хешов в базе данных (@Deimos) <- Но это ещё не протестировано.
    Последний раз редактировалось Geebrox; 27.05.2018 в 23:31.

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    использовать UNHEX для хешов в базе данных (@Deimos) <- Но это ещё не протестировано.
    *Протестировано и прекрасно работает :)
    Хотя, думаю, можно и лучше вариант реализовать (благо в MySQL полно функционала для конвертирования данных), просто я никогда этим функционалом MySQL особо не интересовался и рассказал лишь о том, о чём когда-то читал "вскользь".

    Если у кого-то будет что-то добавить касаемо вопроса, можете отписать в личку и отрою тему.
    Закрыто.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    Geebrox (28.05.2018)
  6. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Удалил свою тему с функциями упаковки/распаковки хешей - всё равно проку от них немного, если в MySQL есть встроенные средства для хранения хешей в упакованном виде.
    К слову о тех средствах...

    Цитата Сообщение от Geebrox Посмотреть сообщение
    Тему можно закрывать, решение не найдено.
    Альтернативное решение: использовать UNHEX для хешов в базе данных (@Deimos) <- Но это ещё не протестировано.
    На самом деле, использование UNHEX совершенно необязательно, понадобится только функция HEX для распаковки бинарных данных обратно в строку.

    Скажу сразу, я не работаю с модами на MySQL и у меня нет под рукой сервера с одним из таких модов, чтобы всё протестировать, равно как и нет времени на подготовку всего этого. Всё, что у меня есть на данный момент - это XAMPP с phpmyadmin и сервером MySQL в комплекте; этого должно хватить, чтоб хотя бы проверить работу запросов к БД.

    Итак, допустим, у нас есть таблица, в которой одно поле отведено под ID (ключ) и другое под хеш-сумму в бинарном (упакованном) виде.
    1. CREATE TABLE `test` (
    2. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    3.  
    4. /* SHA-256 выдаёт 32 байта (256 бит) данных,
    5.   * поэтому длина бинарной строки тоже должна быть равна 32
    6.   */
    7. `data` BINARY(32) NOT NULL,
    8. PRIMARY KEY (`id`)
    9. )


    Едем дальше, упаковка и сохранение хеша в БД должна выглядеть примерно так:
    1. INSERT INTO `test`(`data`) VALUES (0xE3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855)

    Как видно из примера, конвертация строки в данные (бинарную строку) производится в обход функции UNHEX - достаточно просто добавить перед хешем префикс "0x".
    Т.е. примерно так должен составляться запрос:
    1. static const fmt_str[] = "INSERT INTO `test`(`data`) VALUES (0x%e)";
    2. new string[sizeof(fmt_str) + (-2 + 64)];
    3. SHA256_PassHash(/* ... */, /* ... */, string, sizeof(string));
    4. mysql_format(mysql_connection, string, sizeof(string), fmt_str, string);


    И запрос для выгрузки хеша из БД:
    1. SELECT HEX(`data`) FROM `test` WHERE `id`=1

    Здесь функция HEX конвертирует бинарные данные в обычную строку, которую можно получить с помощью cache_get_value_name.

    Таким нехитрым(?) методом можно заставить хеш занимать в 4 раза меньше места в БД, всё с помощью встроенного функционала MySQL.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. Пользователь сказал cпасибо:
    pawnoholic (28.05.2018)
  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Как видно из примера, конвертация строки в данные (бинарную строку) производится в обход функции UNHEX - достаточно просто добавить перед хешем префикс "0x".
    Только стоит понимать, что UNHEX, помимо конвертирования данных, занимается ещё и проверкой их валидности, так что не стоит всецело отказываться от данной функции (она нужна там, где нужно работать именно с числами в шестнадцатеричной системе счисления).
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •