SHA1 hmac PHP против Javascript - разные результаты? - PullRequest
1 голос
/ 30 декабря 2010

Hello Я использую класс в JavaScript для хэширования строки: https://ssl.bsk.com.pl/mobi/js/sha1.js

hex_hmac_sha1("927545161", "asdasdasdasdś") ;

Результат: 5db0194c834d419fc5d68b72c88af1ac8ee749d6

В PHP я хэширую:

echo hash_hmac('sha1', "asdasdasdasdś", '927545161');

но результат: 0b115775a20bed9922b6a9cc934cb5328fe71ade

Где ошибка? 5db0194c834d419fc5d68b72c88af1ac8ee749d6! = 0b115775a20bed9922b6a9cc934cb5328fe71ade

1 Ответ

5 голосов
/ 30 декабря 2010

PHP интерпретирует строку UTF-8 как последовательность 8-битных символов. Тогда как в Javascript каждый символ может преобразовываться в кодовую точку Unicode.

Ваша компактная и полностью нечитаемая реализация Javascript использует .charCodeAt() для преобразования строки в шестнадцатеричную строку. Я не удосужился исследовать его полностью, но, скорее всего, "ś".charCodeAt(0) просто разрешается до 347, а оставшаяся часть преобразования ожидает значение в 8-битном диапазоне от 0 до 255.

...