Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Повторения алгоритма создания хеша sha512
Форумы портала PHP.SU » » Вопросы новичков » Повторения алгоритма создания хеша sha512

Страниц (1): [1]
 

1. xTODx - 02 Апреля, 2017 - 16:07:15 - перейти к сообщению
Есть в жс-е
CODE (javascript):
скопировать код в буфер обмена
  1. ar r = {};
  2. r.clientId = login;
  3. r.sysId = CONST_SYS_ID;
  4. r.random = Math.random() + " :))";
  5. r.sign = "secret password";
  6. var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA512, password);
  7. hmac.update(JSON.stringify(r));
  8. var hash = hmac.finalize();
  9. r.sign = hash.toString();


При random = "0.3401890288802276 Улыбка)"
Хэш 53ed805b0855deb5c5c8f50c53ec4e36 a7b680c934301c48ffa7748f8973cc57 e5c635aca9d9d0e9d915d8ded1710aa7 c1893cf93cff5db9b8288b38b91d1d79

Стараюсь повторить и сравнить

PHP:
скопировать код в буфер обмена
  1. $random = "0.3401890288802276 :))";
  2. $key = ["clientId" => $login, "sysId" => $sysId, "random" => $random];
  3. $hash = hash_hmac("sha512", json_encode($key),$password);
  4. /*Сравнение хеша с сайта с хешем что вышел*/
  5. echo "53ed805b0855deb5c5c8f50c53ec4e36a7b680c934301c48ffa7748f8973cc57e5c635aca9d9d0e9d915d8ded1710aa7c1893cf93cff5db9b8288b38b91d1d79";
  6. echo "<br/>";
  7. echo $hash;
2. Мелкий - 02 Апреля, 2017 - 16:26:14 - перейти к сообщению
Ну для начала у вас даже исходные данные для json разные. В PHP sign не передан.

Затем сверяйте само строковое представление полученного json.
Вообще не надо для ключа криптографии json использовать. Из-за полностью допустимых спецификацией различий в оформлении (отбивка пробелами, табами), финальной запятой, типизации (вдруг у вас sysId в php идёт с mysql и потому является строкой, а в js вы передаёте число), порядка полей в объекте - два json одного и того же объекта в строковом представлении могут быть совершенно разными. А любое различие источника - разумеется даст различие хеша, это одно из базовых требований к алгоритмам хэширования.
3. xTODx - 02 Апреля, 2017 - 20:44:42 - перейти к сообщению
Мелкий пишет:
Ну для начала у вас даже исходные данные для json разные. В PHP sign не передан.

Затем сверяйте само строковое представление полученного json.
Вообще не надо для ключа криптографии json использовать. Из-за полностью допустимых спецификацией различий в оформлении (отбивка пробелами, табами), финальной запятой, типизации (вдруг у вас sysId в php идёт с mysql и потому является строкой, а в js вы передаёте число), порядка полей в объекте - два json одного и того же объекта в строковом представлении могут быть совершенно разными. А любое различие источника - разумеется даст различие хеша, это одно из базовых требований к алгоритмам хэширования.

Использую для парсинга.

Спасибо, не заметил что провтыкал с sign. Нужно просто научится генерировать правильно хеш.
Пока-что безрезультатно.
4. Мелкий - 02 Апреля, 2017 - 20:58:22 - перейти к сообщению
Повторюсь: сверяйте текстовое представление json. Для получения верного хэша, json должен быть идентичный после преобразования в текст.
5. xTODx - 02 Апреля, 2017 - 21:02:22 - перейти к сообщению
Мелкий пишет:
Повторюсь: сверяйте текстовое представление json. Для получения верного хэша, json должен быть идентичный после преобразования в текст.

Я могу посмотреть только переданный аяксом массив, с которого формируется жсон.
js метод не могу подменить.(
6. Мелкий - 02 Апреля, 2017 - 21:29:42 - перейти к сообщению
С чего вдруг? Если это браузер - то браузер у вас есть всегда.
Если какое-нибудь nodejs - то сам nodejs у вас тоже есть.
Всё в ваших руках, в чём проблема воспроизвести проверяемый код и ковырять его как вздумается?

 

Powered by ExBB FM 1.0 RC1