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

Тема: SHA256_PassHash

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

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

    SHA256_PassHash

    При проверке пароля, функция SHA256_PassHash хеширует пароль по другому. То есть передается тот же соль и тот же пароль, но значение разное.

    Код:

      Открыть/закрыть
    PHP код:
    bool:CheckPassword(password[], expected_hash[], salt[])
    // by Daniel_Cortez
        
    new hash[64 1];
        
    SHA256_PassHash(passwordsalthashsizeof(hash));
        
    printf("\n\n%s\n\n%s"hashexpected_hash);
        
    printf("\n\n%d | %d\n\n"strlen(hash), strlen(expected_hash));
        
    printf("\n\n%s\n\n%s"saltplayer[0][player_salt]);
        
    printf("\n\n%d | %d\n\n"strlen(salt), strlen(player[0][player_salt]));
        return 
    bool:(strcmp(hashexpected_hash) == 0);
    // использую нулевой ид игрока, так как на сервере только я (под 0 ид) 


    Логи:

      Открыть/закрыть
    PHP код:
    6C3C8C95ED0577458DF28209AED66F73021F11D95FBB0083CC45CD3068743D81 // хешированный пароль, которого игрок ввел

    AEF3BA85A58F8C10EE577E5C57C8FB03F996FE2C15FA1D37FEE37E70F882416F // хешированный пароль из бд

    64 64 // длина строк



    GrjxgKGYG28tvpmhRiWklZyE2QIxQ5PWTnTPpQyBg4IwW35imEQzPQbPjtRUtgdU // соль

    GrjxgKGYG28tvpmhRiWklZyE2QIxQ5PWTnTPpQyBg4IwW35imEQzPQbPjtRUtgdU // соль

    64 64 // длина строк 

  2. #2
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    А ты уверен, что игрок с первого раза ввел свой пароль?
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    А ты уверен, что игрок с первого раза ввел свой пароль?
    Сам как думаешь? Я выше написал, что на сервере ТОЛЬКО Я (под 0 ид) и я разве могу ошибиться со своим паролем, или открыл бы эту тему не проверяя этот аргумент? Я уверен, что ввожу один и тот же пароль, даже создал 2 акка для проверки.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Значит либо при регистрации пароль хэшируешь неправильно, либо проверяешь неверно. Функция работает нормально.
    Возьми свой пароль, соль и захэшируй их в OnGameModeInit с выводом в консоль, а после посмотри с каким из двух результатов будет совпадать
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Значит либо при регистрации пароль хэшируешь неправильно, либо проверяешь неверно. Функция работает нормально.
    Возьми свой пароль, соль и захэшируй их в OnGameModeInit с выводом в консоль, а после посмотри с каким из двух результатов будет совпадать
    результат не совпадает с хешом из бд, значит проблема при создание хеша во время регистрации. Но я не нашел никаких проблем там.
    Функция создание хеша при регистрации:

      Открыть/закрыть
    PHP код:
    stock CreatePlayerPassword(playeridpassword[])
    {
        
    player[playerid][player_salt][0] = EOS;
        
    player[playerid][player_password][0] = EOS;
        new 
    length strlen(random_letters); 
        for(new 
    065i++)
        {
            
    player[playerid][player_salt][i] =
                
    random_letters[random(length)];
        }
        
    SHA256_PassHash(passwordplayer[playerid][player_salt],
            
    player[playerid][player_password], 65);
        return 
    1;


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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну логируй то, какие данные приходят в функцию до хэширования, какая получается соль и какой результат. А после смотри что попадает в БД.

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Причина, скорее всего, в коде, который вызывает показанные тобой функции, а не в самих функциях
    Причина оказалось в самой функции CreatePlayerPassword, точно не знаю почему pawn так повел себя (очень странно). Короче говоря, перенес весь код (т.е. цикл с созданием соля) в OnGameModeInit и логировал длину получаемого соля (создавал массив с 65 ячейками для соля, так же как и в энуменаторе игрока), длина строки оказалась 67. Не знаю как так получалось. Изменил кол-во циклов с 65 на 64, длина строки изменилась на 64 (т.е. на нормальную длину, которая должна была быть). Ну вкратце, проблема решена, но тему оставлю открытой, вдруг кто знает в чем именно заключалась моя ошибка и почему длина строки получалась в 67 символов, хотя я компилировал дебаг режимом (-d3) и с подключенным crashdetect'ом.

    P.S. Крашев не было (т.е. связанных с выходом за пределы массива). Crashdetect молчал.
    Последний раз редактировалось Geebrox; 23.01.2017 в 19:28.

  8. #8
    Аватар для qwezert
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.06.2016
    Адрес
    Одесса, Украина
    Сообщений
    281
    Репутация:
    51 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Причина оказалось в самой функции CreatePlayerPassword, точно не знаю почему pawn так повел себя (очень странно). Короче говоря, перенес весь код (т.е. цикл с созданием соля) в OnGameModeInit и логировал длину получаемого соля (создавал массив с 65 ячейками для соля, так же как и в энуменаторе игрока), длина строк оказалось 67. Не знаю как так получалось. Изменил кол-во циклов с 65 на 64, длина строки изменилось на 64 (т.е. на нормальную длину, который должен был быть). Ну вкратце, проблема решена, но тему оставлю открытой, вдруг кто знает в чем именно заключалась моя ошибка.
    Без кода - до сих пор непонятна твоя ошибка.
    Лучше лишний раз показаться глупым и что то узнать, чем вы*бнуться и обосраться.

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

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от qwezert Посмотреть сообщение
    Без кода - до сих пор непонятна твоя ошибка.
    Код был выше, прочитай ранее сообщение и поймешь.

    - - - Добавлено - - -

    Для того чтобы лишние вопросы не возникали, скину код еще раз:

     Функция CreatePlayerPassword, которого логировал в OnGameModeInit
    PHP код:
    stock CreatePlayerPassword(playeridpassword[])
    {
        
    player[playerid][player_salt][0] = EOS;
        
    player[playerid][player_password][0] = EOS;
        new 
    length strlen(random_letters); 
        for(new 
    065i++)
        {
            
    player[playerid][player_salt][i] =
                
    random_letters[random(length)];
        }
        
    SHA256_PassHash(passwordplayer[playerid][player_salt],
            
    player[playerid][player_password], 65);
        return 
    1;



    Логирование в OnGameModeInit:

    PHP код:
        new salt[64 1];
        new 
    length strlen(random_letters); 
        for(new 
    065i++)
        {
            
    salt[i] = random_letters[random(length)];
        }
        
    printf(#%d, strlen(salt)); // выводило 67,крашев не было, выход за пределы массива тоже не было 
    Изменил на:

    PHP код:
        new salt[64 1];
        new 
    length strlen(random_letters); 
        for(new 
    064i++)
        {
            
    salt[i] = random_letters[random(length)];
        }
        
    printf(#%d, strlen(salt)); // начал выводить 64 (длину которая должна была быть) 
    Изменил код в CreatePlayerPassword:

      Открыть/закрыть
    PHP код:
    stock CreatePlayerPassword(playeridpassword[])
    {
        
    player[playerid][player_salt][0] = EOS;
        
    player[playerid][player_password][0] = EOS;
        new 
    length strlen(random_letters); 
        for(new 
    064i++)
        {
            
    player[playerid][player_salt][i] =
                
    random_letters[random(length)];
        }
        
    SHA256_PassHash(passwordplayer[playerid][player_salt],
            
    player[playerid][player_password], 65);
        return 
    1;



    Проблема решена, но остается вопрос, почему же строка получалась с длиной в 67 символов?
    Последний раз редактировалось Geebrox; 23.01.2017 в 19:41.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    В первоначальном цикле у тебя итерации начинались с нуля до 64 включительно. Это и было проблемой. То бишь, с тем условием цикл совершал лишнюю итерацию.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

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

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

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

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

Ваши права

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