Mario_Ferro |
Дата: Суббота, 15.10.2016, 20:47 | Сообщение # 1
|
Новичок
Сообщений: 2
Статус: Offline
|
Bcrypt для SA:MP Последний релиз: v2.2.3 (2014-11-24) Скачать Исходный код
Введение: BCrypt является функцией хеширования паролей, которая автоматически реализовывает 'соли' (salt) на все пароли Bcrypt широко рекомендуется и часто рассматривается как наиболее безопасный способ хеширования паролей
Преимущества: - Все пароли автоматически 'солятся' - BCrypt медленный потому что делает жесткий offline перебор паролей - Плагин является многопоточным, поэтому почти не оказывает влияния на производительность сервера - Совместим с PHP функцией password_verify() и password_hash()
Установка и использование: - Скопировать bcrypt-samp.dll и bcrypt-samp.so в папку plugins - Включить файл в Ваш filterscript или gamemode ( #include <bcrypt> ) - Вызов bcrypt_check осуществляется, если Вы хотите проверить пользователя на правильность ввода пароля, результат такой проверки можно получить путём вызова функции bcrypt_is_equal <br / например: new bool: match = bcrypt_is_equal(); ) - Если Вы решили перейти с другой шифровальни на эту, то используйте bcrypt_needs_rehash, чтобы проверить, должна ли хэш обновляться (возвращает true, если хэш является актуальной)
Функции:
Код bcrypt_hash(key[], cost, callback_name[], callback_format[] = "", {Float, _}:...); bcrypt_get_hash(dest[]); bcrypt_check(key[], hash[], callback_name[], callback_format[] = "", {Float, _}:...); bcrypt_is_equal(); bcrypt_needs_rehash(hash[], cost); bcrypt_find_cost(time_target = 250); bcrypt_debug(BCRYPT_DEBUG_LEVEL:level = BCRYPT_LOG_ERROR); bcrypt_set_thread_limit(value);
Хэширование: Функция bcrypt_get_hash возвращает результат из функции bcrypt_hash (хэш записывается в 61 символ) 60+null, которая может быть определена как BCRYPT_HASH_LENGTH Ниже выведен пример того, как фраза "Hello World!" хэшируется 3 раза Хэш совершенно уникален каждый раз потому что при вычислении хэш используется случайная 'соль' (salt)
Код 1. $2y$12$33T1WbJGYD9YVKpBShTDsOOlS3248tApLCndjz28n0cyWZR1HYXy6 2. $2y$12$ExnQyld7o8w0QbWmAJgsJuygOwlFlbMITgzuw9g.6jbnscTd5kSK6 3. $2y$12$ivsAFLaGM52oCZnFe/QKBuoJy0osV8UsbJODPBUxeY3XSBhr739Yi
Cost: Cost представляет собой фактор работы, который пропорциональна количеству времени, которое требуется для расчёта хэш Cost от 10 до 13 - оптимально для большинства серверов Диапазон разрешенного cost'a - от 4 до 31 (но лучше использовать 12)
Перейдём к примеру использования:
Код #include <bcrypt> #define BCRYPT_COST 12 #define DIALOG_REGISTER 1 #define DIALOG_LOGIN 2 forward OnPasswordHashed(playerid); forward OnPasswordChecked(playerid); public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_REGISTER: bcrypt_hash(inputtext, BCRYPT_COST, "OnPasswordHashed", "d", playerid); case DIALOG_LOGIN: { //Переменная hash это хэш, загруженный из базы данных. //Произвести загрузку можно на этапе проверки на существования аккаунта //Это может быть записано как PlayerInfo[playerid][pPassword] bcrypt_check(inputtext, hash, "OnPasswordChecked", "d", playerid); } } } public OnPasswordHashed(playerid) { new hash[BCRYPT_HASH_LENGTH+1]; bcrypt_get_hash(hash); //далее идёт запись хэша в базу. Как - решайте сами return 1; } public OnPasswordChecked(playerid) { new bool:match = bcrypt_is_equal(); if(match==true) { //действия, если пароль совпал return 1; } //действия, если пароль не совпал return 1; }
Устранение неисправностей: Проблема: отсутствие MSVCR120.dll Решение: скачайте и установите 32 разрядную версию [url="https://www.microsoft.com/ru-ru/download/details.aspx?id=40784"]Visual C++ Redistributable Packages for Visual Studio 2013(vcredist_x86.exe)
Авторы: - Johnson_boy - maddinat0r (предложивший ценные идеи)
Отсебятина: Тема была взята с официального форума SA:MP и переведена на русский язык Ещё нигде не видел просвещение данной темы на русских форумах по pawn Думаю, этот крипт придётся достойной заменой MD5 и SHA Не агитирую заменять различные крипты на этот, но создам тему для просвещения масс Читая мной написанный перевод, придётся подумать, хотя я старался его писать более менее понятным Прежде, чем вы начнёте обвинять и сквернословить данный плагин, прошу хотя бы ознакомиться с темой Надеюсь, данная тема заслуживает хотя бы лайка. Как показала практика: перевести тему легче, чем составить, но не намного Впервые перевожу подобный текст и раньше думал, что переводить тексты - как семечки щёлкать, но как же я ошибался .. Вопрос: "А как хранить этот хэш в базе данных, если он каждый раз уникален" Ответ: "Записать и хранить одну 'соль', плагин сам выберет, какого типа эта соль" Вопрос: "Зачем мне использовать BCrypt, если он медленный ? Лучше буду использовать сторонние крипты" Ответ: "BCrypt - широко рекомендуемое решение для тех, кто заботится о безопасности пользователей." Ответ №2 на вопрос №2: "BCrypt - многопоточный плагин, поэтому не тормозит работу сервера" Ответ №3 на вопрос №2: "BCrypt - медленный, потому что проводит довольно жестокий offline перебор паролей"
Сообщение отредактировал Mario_Ferro - Суббота, 15.10.2016, 20:52 |
|
|
|