#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
Комментариев нет:
Отправить комментарий