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

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±

    GenerateSalt - генератор случайно соли для хэширования

    Описание:
    Генерирует случайную соль для паролей из символов ASCII с 33 по 126 код.

    Параметры:
    buf[] - строка, в которую будет записана соль
    len - длина строки (по умолчанию равно длине строки buf[])

    Возвращаемое значение: длина строки

    Код:
    PHP код:
    GenerateSalt(buf[], len sizeof buf)
    {
        for(new 
    0< (len 1); i++)
        {
            
    buf[i] = random(94) + 33;
            if(
    buf[i] == '%')
                
    buf[i] = '#';
        }
        
    buf[len 1] = 0;
        return 
    len;


    Пример использования:
    PHP код:
    new hash[64 1];
    new 
    salt[64 1];
    GenerateSalt(salt);
    SHA256_PassHash(inputtextsalthashsizeof hash); 

    Автор: themallard
    Последний раз редактировалось TheMallard; 20.10.2018 в 16:30. Причина: Исправлены ошибки

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Во-первых, "Salt" - слишком простое название, которое не раскрывает сути работы функции. ИМХО, самым очевидным было бы "GenerateSalt".

    Во-вторых, функция не записывает завершающий '\0', из-за чего строка не будет закончена правильно, если в массиве salt уже была строка, которая длиннее сгенерированной соли.
    Пример:
    1. Salt(salt[], len = sizeof salt)
    2. {
    3. for(new i = 0; i < len; i++)
    4. {
    5. salt[i] = random(94) + 33;
    6. if(salt[i] == '%')
    7. salt[i] = '#';
    8. }
    9. return;
    10. }
    11.  
    12. main()
    13. {
    14. new str[] = "abcdefghijklmnopqrstuvwxyz";
    15. Salt(str, 8);
    16. print(str);
    17. }
    Код:
    2sDM55zUijklmnopqrstuvwxyz
    В-третьих, в чём смысл заменять "%" на "#"?

    В-четвёртых, зачем в конце функции нужен return, если функция всё равно ничего не возвращает?

    В-пятых, не лишним было бы сделать возврат длины получившейся строки, как в функциях SA-MP (к примеру, GetPlayerName возвращает не только сам ник (косвенно, через массив), но и его длину).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    Спасибо, я исправил ошибки.

    По третьему замечанию: символ % может создать проблемы, если такая строка попадет в функцию format — то есть всегда, ведь мы обычно форматируем запрос в базу данных.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от TheMallard Посмотреть сообщение
    Спасибо, я исправил ошибки.
    Не исправили, завершающий '\0' записывается по неправильному индексу (последний валидный индекс - это не "len", а "len - 1").

    Да и функция всё так же названа "Salt" - должно быть очень сложно было переименовать её в предложенный выше вариант.
    (Ни в коем случае не пытаюсь выглядеть слишком придирчивым, просто хочу понять вашу логику. Если предложенное мной название не понравилось и вы знаете вариант лучше, вместо игнорирования могли бы обосновать свой выбор - разве это сложно?)

    Цитата Сообщение от TheMallard Посмотреть сообщение
    По третьему замечанию: символ % может создать проблемы, если такая строка попадет в функцию format — то есть всегда, ведь мы обычно форматируем запрос в базу данных.
    Даже если и так, "%" можно просто продублировать - format распознаёт спецификатор "%%", выводя одиночный знак "%".
    http://wiki.pro-pawn.ru/wiki/%D0%A4%...80%D0%BE%D0%BA
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    Исправил. Прошу исправить название темы.

    // VVWVV: Готово
    Последний раз редактировалось VVWVV; 20.10.2018 в 20:16.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Только большого профита от функции нет. Скорее, только лишние траты ресурсов (как для генерации соли, так и для получения/хранения).

    Проще и лучше в качестве соли использовать ник игрока, который известен ещё до отправки каких-либо запросов в базу. На выходе получится точно такая же уникальная соль, которая не даст использовать радужные таблицы, усложнив жизнь хацкерам, но, при этом, сведя все телодвижения при обработке пароля сервером к минимуму.
    Последний раз редактировалось DeimoS; 21.10.2018 в 11:55.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  7. #7
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Только большого профита от функции нет. Скорее, только лишние траты ресурсов (как для генерации соли, так и для получения/хранения).

    Проще и лучше в качестве соли использовать ник игрока, который известен ещё до отправки каких-либо запросов в базу. На выходе получится точно такая же уникальная соль, которая не даст использовать радужные таблицы, усложнив жизнь хацкерам, но, при этом, сведя все телодвижения при обработке пароля сервером к минимуму.
    Вот только станет невозможно изменить ник игроку без изменения пароля.

  8. Пользователь сказал cпасибо:
    VVWVV (21.10.2018)
  9. #8
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Вот только станет невозможно изменить ник игроку без изменения пароля.
    Почему нет? Соль хранить можно отдельно, а там уже делай что угодно с ником.

  10. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Kucklovod00 Посмотреть сообщение
    Почему нет? Соль хранить можно отдельно, а там уже делай что угодно с ником.
    Соль и нужно хранить в отдельном поле. А мои слова относятся к цитируемому сообщению, которое, по всей видимости, ты не удосужился прочитать.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Вот только станет невозможно изменить ник игроку без изменения пароля.
    Достаточно попросить игрока ввести повторно пароль под предлогом защиты, например (что, к слову, вполне разумно). Хотя далеко не на всех серверах есть возможность смены ника.

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

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

    Steve Pavlina

 

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

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

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

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

Ваши права

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