#php #javascript #nodejs #хеширование #sha1
Для расчета хэшей в nodejs использую этот скрипт. В php использую стандартную реализацию. Пишу алгоритм hmac для nodejs. Есть код на php, пытался его продублировать в node, но возникла проблема при генерации хэша. Вот код php: ` $opad = str_repeat(chr(0x5C), 64); $ipad = str_repeat(chr(0x36), 64); for ($i = 0; $i < strlen($key); $i++) { $opad[$i] = $opad[$i] ^ $key[$i]; $ipad[$i] = $ipad[$i] ^ $key[$i]; } return sha1($ipad);` Строка $ipad "�n�³� `�3{G�_p�#�66666666666666666666666666666666666666666666" Коды символов "248,110,215,194,179,18,221,15,32,96,224,51,123,71,220,95,112,168,35,241,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54" Выводит "f0146b3c71d411ec5924ded1e47fe73d6db427a0". В node код такой: var opad = Array(64); var ipad = Array(64); var opadStr = ''; var ipadStr = ''; for (var i = 0; i < key.length; i++) { opad[i] = key.charCodeAt(i) ^ 0x5C; ipad[i] = key.charCodeAt(i) ^ 0x36; } for(var i = 0; i < 64; i++) { opadStr += String.fromCharCode(opad[i]); ipadStr += String.fromCharCode(ipad[i]); } return sha1(ipadStr); Строка ipadStr "øn׳Ýà3{GÜ_p¨#ñ66666666666666666666666666666666666666666666"` Коды символов "248,110,215,194,179,18,221,15,32,96,224,51,123,71,220,95,112,168,35,241,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54" Выводит такой хэш "38e3f69f2d7d0cb8d6672050271a57e8448ec451". Может, в кодировке дело.
Ответы
Ответ 1
Сталкивался с подобными трудностями при написание расчета md5 для js Да различие в кодировках, JS оперирует внутри UCS-2 или UTF-16, а php использует ISO-8859-1 (для работы с мультибайтными строками используются функции mb_*) PHP каждый раз после преобразованиея код->чимвол и обратно оперирует 1 символ есть 1 байт, а JS каждый раз при преобразовании код -> символ дает 2 байта Я в свое время выкрутился переездом со строк на Uint8Array
Комментариев нет:
Отправить комментарий