hash_hmac a UTF-8

0

Witam.
Mam mały problem hash_hmac - dokładnie z polskimi znakami.
W JavaScript korzystam z biblioteki https://ssl.bsk.com.pl/mobi/js/sha1.js
gdzie jest hex_hmac_sha1. Jak wykonam

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

wynikiem jest
5db0194c834d419fc5d68b72c88af1ac8ee749d6

Natomiast gdy to zrobię w php:

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

wynikiem jest
0b115775a20bed9922b6a9cc934cb5328fe71ade

Gdzie leży problem?
W php koduje w UTF-8. Strona z JS tez jest napisana w UTF-8

0

A kto powiedział, że wewnętrzne, domyślne kodowanie JavaScript jest zgodne z kodowaniem strony? Tak się składa, że to akurat Unicode (utf-32 little endian).

Popatrzyłem sobie na ten kod javascript i on NIE będzie działać poprawnie, gdy damy mu tekst w utf-32 (z resztą na górze tego pliku mamy informację, że będziemy operować na 8-bitowych znakach). Najważniejsza jest tutaj funkcja "str2binb". Zamienia ona napis na tablicę liczb, w której każda liczba odpowiada kolejnym czterem znakom (tworzy liczbę 32-bitową, gdzie każde 8 bitów odpowiada kolejnemu znakowi). Problemem jest, gdy potraktujemy tę funkcję literą, gdzie faktycznie składać się ona będzie z więcej niż 8-bitów, na przykład 'ś', czyli bajtów 81 oraz 1. Funkcja ta bierze pod uwagę TYLKO pierwszy bajt znaku, tj. 81.

Z resztą, widać to tutaj (żeby uzyskać liczbę 347 w JavaScript musiałem zamienić ją ręcznie; gdybym użył samego charCodeAt, dostalibyśmy wynik 81):
http://revik.one.pl/private/kodowanie.php
Musisz sprawdzić jeszcze w jakiej formie te dane trafiają do funkcji na stronie banku. Jeżeli faktycznie jest to UTF-32 (nie są nigdzie zamieniane) to.. według mnie teoretycznie możliwe jest zalogowanie się z innym hasłem niż faktyczne, gdy zawiera ono polskie znaki. Gdy zamiast 'ś' podamy '[' (oba zwrócą identyczną liczbę przez charCodeAt(0)), też będziemy mogli się zalogować.

edit: dodałem przykład odnośnie powyższego.
źródło: http://revik.one.pl/private/kodowanie.phps

0

Nie wiem, pamiętam że jak dawałem tag META z charsetem utf-8 to JS zaczynał pracować zgodnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1