Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 4 1 2 3 ... ПоследняяПоследняя
Показано с 1 по 10 из 34

Тема: SHA256_PassHash

  1. #1
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±

    SHA256_PassHash

    Описание:
    Вычисляет хеш сумму из указанной строки. Несмотря на своё название, функция может хешировать любые строки, а не только пароли.
    Есть возможность указать соль для защиты от атак с помощью радужных таблиц.

    Параметры:
    password[] - входная строка.
    salt[] - соль для хеширования.
    ret_hash[] - строковая переменная, в которой будет записана хеш-сумма.
    ret_hash_len - размер переменной ret_hash (в ячейках).

    Возвращаемое значение:
    Функция всегда возвращает 1. Также возвращает хеш-сумму, вычисленную из входной строки и соли, в виде строки в параметре ret_hash.

    Примечания:
    • Функция была добавлена в SA:MP 0.3.7 R2.
    • В 0.3.7 R2 функция иногда выдавала неправильные результаты. Баг был исправлен только в версии R2-1, версией R2 лучше не пользоваться.
    • Массив, в котором будет сохранена хеш-сумма, должен быть размером не менее 64 ячеек + 1 ячейка под завершающий нуль-символ в строке (итого 65 ячеек), иначе увеличится риск подбора хешируемой строки злоумышленником, у которого окажется ваша база данных с хешами. При урезании хеша возникнет больше вариантов строк, хеш-суммы которых совпадают, при этом для успешной атаки достаточно подобрать хотя бы один из таких вариантов. По сути каждая недостающая ячейка в массиве с хэшем упрощает процесс взлома в 16 раз.
    • При хешировании паролей игроков рекомендуется использовать соль, уникальную для каждого игрока. Если у двух аккаунтов будут одинаковые пароли и злоумышленник узнает хеш от одного из этих паролей, второй пароль придётся подбирать отдельно, т.к. с уникальной солью хеши будут разными.
      Например, можно случайным образом сгенерировать строку под соль при регистрации игрока, хешировать пароль с полученной солью и сохранить хеш и соль в данных аккаунта.
      Также можно генерировать новую соль при каждой смене пароля игроком.
    • Соль добавляется после хешируемой строки. Например, если на вход подаётся строка "01234567" и соль "abc", хеш будет вычислен из строки "01234567abc".


    Пример использования:
    1. /**
    2.  * Проверяет правильность введённого игроком пароля.
    3.  * @param password[] - пароль
    4.  * @param expected_hash[] - хеш-сумма от пароля, сохранённая в аккаунте при регистрации игрока
    5.  * @param salt[] - соль, используемая при хешировании
    6.  **/
    7. bool:CheckPassword(password[], expected_hash[], salt[])
    8. {
    9. /* вычислим хеш-сумму из пароля и соли */
    10. new hash[64+1];
    11. SHA256_PassHash(password, salt, hash, sizeof(hash));
    12. /* если strcmp вернёт 0 - хеши совпадают, а значит пароль верный */
    13. return bool:(!strcmp(hash, expected_hash, false));
    14. }

    См. также:


    Статью подготовил: Daniel_Cortez

    Специально для Pro-Pawn.ru
    Копирование данной статьи на других ресурсах без разрешения автора запрещено.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  2. 9 пользователя(ей) сказали cпасибо:
    $continue$ (17.07.2015) Competent (26.09.2017) Desulaid (19.07.2015) Maranzalla (12.01.2016) Nash_Brigers (11.04.2017) Nurick (15.08.2015) Processing (13.07.2016) Smile (15.08.2015) [ForD] (15.08.2015)
  3. #2
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Как всегда, хорошо все описано.

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

    Статус
    Оффлайн
    Регистрация
    08.09.2013
    Сообщений
    22
    Репутация:
    16 ±
    Думаю у многих возникнет вопрос, как проверить введенный пароль на сайте при авторизации в ucp, который конфигурирует с сервером mysql, в котором записана строка с паролем в виде хэш суммы.

    PHP код:
    <?php
    /**
     * $password = пароль введенный в input поле при авторизации (используется метод POST)
     * $salt = используемая соль. если соль у всех аккаунтов разная, получаем ее значение sql запросом.
     * $hashed = получаем так сказать засоленную хэш сумму
     * $hash = сюда заносим хэш сумму из базы данных так же sql запросом
     * strcasecp = бинарное сравнение строк без учета регистра
     */

    $password $_POST['password'];
    $salt 'ZGxt3MSEE'//запишу соль (для примера)
    $hashed hash('sha256'$password $salt);
    $hash '1AEDF41427A95F6A041E2FF8C0F50B4E6ADC97F2EA6B5863E5FBC42CA3287310'//наша хэш сумма из бд (для примера)
    if (strcasecmp($hashed$hash) == 0) {
        
    //пароль верный, выполняем нужные действия
    }
    else {
        
    //выводим сообщение о неверном пароле
    }
    ?>

  5. 3 пользователя(ей) сказали cпасибо:
    Daniel_Cortez (25.12.2015) Kovshevoy (12.12.2018) Processing (13.07.2016)
  6. #4
    Аватар для Cleo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.11.2015
    Сообщений
    6
    Репутация:
    0 ±
    Правильно понял?
    Это в диалог авторизации:
    PHP код:
    new MyHash[30];
    SHA256_PassHash(Player[playerid][Password], salt/*тут можно по подробнее*/MyHashsizeof (MyHash));
    if(
    strcmp(MyHashPlayer[playerid][Password]) == 0)
    {
     
    //спавним игрока

    И в диалог регистрации:
    PHP код:
    SHA256_PassHash(Player[playerid][Password], 30inputtext); 
    Последний раз редактировалось Cleo; 25.12.2015 в 15:54.

  7. #5
    Аватар для seriu
    Пользователь

    Статус
    Онлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    Цитата Сообщение от Cleo Посмотреть сообщение
    Правильно понял?
    И в диалог регистрации:
    PHP код:
    SHA256_PassHash(Player[playerid][Password], 30inputtext); 
    Видима нет

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    (итого 65 ячеек),
    т.е

    PHP код:
    SHA256_PassHash(inputtext"key2212"Player[playerid][Password], 65); 
    Последний раз редактировалось seriu; 12.01.2016 в 23:06.

  8. #6
    Аватар для Maranzalla
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Адрес
    Moscow
    Сообщений
    108
    Репутация:
    -1 ±
    извиняйте за нубство но как я понял он хеширует пароль в хеш 256 символов а мы записываем используя только 64-65 ячеек - это как для экономии памяти чтоли?

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

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Maranzalla Посмотреть сообщение
    извиняйте за нубство но как я понял он хеширует пароль в хеш 256 символов а мы записываем используя только 64-65 ячеек - это как для экономии памяти чтоли?
    Для того, чтобы найти полезную информацию используйте google; нашел вам статью с Википедии. (именно там говорится о цифре 64)

  10. #8
    Аватар для Maranzalla
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Адрес
    Moscow
    Сообщений
    108
    Репутация:
    -1 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Для того, чтобы найти полезную информацию используйте google; нашел вам статью с Википедии. (именно там говорится о цифре 64)
    из вашего же источника не совсем понятно
    Хеш-функция:Длина слова
    SHA‑256, SHA‑224:32
    SHA‑512, SHA‑384, SHA‑512/256, SHA‑512/224:64
    И тут и там 256 так 32 или 64?
    p.s гуглом пользоваться умею но разьяснить можете и поподробнее, если у вас нет навыков в обьяснении может не стоит лезть с комментариями - все-таки форум допускает и какую-то часть новичков наряду с PRO вы с этим согласны?

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

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Maranzalla Посмотреть сообщение
    из вашего же источника не совсем понятно
    Хеш-функция:Длина слова
    SHA‑256, SHA‑224:32
    SHA‑512, SHA‑384, SHA‑512/256, SHA‑512/224:64
    И тут и там 256 так 32 или 64?
    p.s гуглом пользоваться умею но разьяснить можете и поподробнее, если у вас нет навыков в обьяснении может не стоит лезть с комментариями - все-таки форум допускает и какую-то часть новичков наряду с PRO вы с этим согласны?
    Каждый символ — это цифра от 0 до 9, или буква от A до F, т.е. это шестнадцатеричная система счисления. Данные символы формируют 4 бита информации. Таким образом, хеш равняется 64 (2^6) x 4 = 256 битов информации (длина внутреннего состояния); в названии функции также указано данное число, как и в других алгоритмах из семейства SHA.
    64 — это количество итераций (насколько я помню).

  12. #10
    Аватар для Maranzalla
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Адрес
    Moscow
    Сообщений
    108
    Репутация:
    -1 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Каждый символ — это цифра от 0 до 9, или буква от A до F, т.е. это шестнадцатеричная система счисления. Данные символы формируют 4 бита информации. Таким образом, хеш равняется 64 (2^6) x 4 = 256 битов информации (длина внутреннего состояния); в названии функции также указано данное число, как и в других алгоритмах из семейства SHA.
    64 — это количество итераций (насколько я помню).
    значит 64 - это количество итераций насколько ты помнишь или же это Длина Ключа или это тоже самое? просто смотрю на википедии Длина слова 32 а вот количество итераций-графа та что справа 64 а в другом месте Длина слова 64 а количество итераций 80

 

 
Страница 1 из 4 1 2 3 ... ПоследняяПоследняя

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

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

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

Ваши права

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