Добавлен Enemy1PK
Скачал классическую наработку SLSBJ от джокера, но пока не могу понять что в ней отвечает за разброс символов.
На скрине видно что коды слишком похожи друг на друга.
Хотелось бы чтобы при изменении любого значения (уровень/экспа/предметы) даже на единицу, код очень рандомно перетряхивало как в большинстве рпг.
На скрине видно что коды слишком похожи друг на друга.
Хотелось бы чтобы при изменении любого значения (уровень/экспа/предметы) даже на единицу, код очень рандомно перетряхивало как в большинстве рпг.
Можно на jass, все равно уже перевел, только попонятнее если можно.
Приложил классик версию наработки.
Приложил классик версию наработки.
Принятый ответ
Enemy1PK, если ты подпишешь код хеш-функцией даже без ника игрока, то при изменении кода и его загрузке подпись будет невалидна.
Можно и I2S(StringHash(...)) юзать, только её легко выполнить не вдаваясь в технические подробности твоей карты, я бы замаскировал хотябы под свой алфавит.
Можно и I2S(StringHash(...)) юзать, только её легко выполнить не вдаваясь в технические подробности твоей карты, я бы замаскировал хотябы под свой алфавит.
При сохранении:
"конечный код" = сейв код + подпись (хеш-функция от этого кода + соль, можно без соли)
Пример: savecode + ":" + I2S(StringHash(savecode + username + map_brand_name + ещё любая привязка))
отдаёшь конечный код юзеру
"конечный код" = сейв код + подпись (хеш-функция от этого кода + соль, можно без соли)
Пример: savecode + ":" + I2S(StringHash(savecode + username + map_brand_name + ещё любая привязка))
отдаёшь конечный код юзеру
При загрузке:
"конечный код" = получаешь его у юзера
Пример: "abcd:efgh"
"сейв-код" = подстрока от конечного кода
Пример: "abcd"
"фактическая подпись" = подстрока от конечного кода
Пример: "efgh"
"ожидаемая подпись" = хеш-функция от сейв-кода
Пример: I2S(StringHash("abcd" + username + map_brand_name + ещё любая привязка))
"конечный код" = получаешь его у юзера
Пример: "abcd:efgh"
"сейв-код" = подстрока от конечного кода
Пример: "abcd"
"фактическая подпись" = подстрока от конечного кода
Пример: "efgh"
"ожидаемая подпись" = хеш-функция от сейв-кода
Пример: I2S(StringHash("abcd" + username + map_brand_name + ещё любая привязка))
если "ожидаемая подпись" не равно "фактическая подпись", то сейв-код не валиден
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ScorpioT1000
Тогда для любого другого имени этот код будет невалиден, а при изменении любой единицы данных хеш-код будет меняться в зависимости от энтропии хеш-функции.
Коды для сейв-лоада - кринж.
Отредактирован Enemy1PK
Все таки код выглядит достаточно ненадежно, как будто конец отвечает за ник, начало за лвл и тд, нет какого-либо адекватного перемешивания.
Тут вопрос даже не в том чтобы сделать невероятную защиту кода, а просто не искушать людей заниматься подбором кода. Если это легко - у кого-нибудь наверняка зачешутся руки.
Уже и сохранения и выводы всего смог сделать, только в этом не разобрался.
Отредактирован ScorpioT1000
Можно и I2S(StringHash(...)) юзать, только её легко выполнить не вдаваясь в технические подробности твоей карты, я бы замаскировал хотябы под свой алфавит.
"конечный код" = сейв код + подпись (хеш-функция от этого кода + соль, можно без соли)
Пример: savecode + ":" + I2S(StringHash(savecode + username + map_brand_name + ещё любая привязка))
отдаёшь конечный код юзеру
"конечный код" = получаешь его у юзера
Пример: "abcd:efgh"
"сейв-код" = подстрока от конечного кода
Пример: "abcd"
"фактическая подпись" = подстрока от конечного кода
Пример: "efgh"
"ожидаемая подпись" = хеш-функция от сейв-кода
Пример: I2S(StringHash("abcd" + username + map_brand_name + ещё любая привязка))