Некоторое время я пытался переписать php-код в node.js, но столкнулся с проблемой.
Это код PHP, на котором я застрял (немного измененный):
$fp = fopen($privateKeyFileName, "r");
$priv_key = fread($fp, 8192);
fclose($fp);
echo "PRIVATE KEY: <br/><br/>";
var_dump($priv_key);$pkeyid = openssl_pkey_get_private($priv_key, $privateKeyPassword);
echo " <br/><br/>PRIVATE KEY ID: <br/><br/>";
var_dump($pkeyid);
openssl_sign($message, $signature, $pkeyid);
openssl_free_key($pkeyid);
echo " <br/><br/>SIGNATURE: <br/><br/>";
var_dump($signature);
$message .= $signature;
echo " <br/><br/>END MESSAGE: <br/><br/>";
var_dump($message);
Часть, на которой я застрял: openssl_pkey_get_private
, Я не уверен, как повторить это. Я пытался пропустить это, пусть crypto
(nodejs) делают работу, но без везения.
Самое интересное, что нужно сделать: каждый раз, когда я подписываю сообщение, $signature
имеет 128 символов (строка). Это требование, и это моя проблема в узле.
Это мой код nodejs:
function signData(data) {
var sign = crypto.createSign('RSA-SHA256');
sign.update(data);
var signed = sign.sign(privateKey);
return signed;
}
И еще одна вещь, это RSA-SHA256
должен быть SHA1 с RSA. Этот пример никогда не генерирует ровно 128 символов строки. Он возвращает буфер, и независимо от того, как я его анализирую или конвертирую, я не могу выполнить требование. Я использую один и тот же закрытый ключ в обоих примерах.
Есть идеи?
Задача ещё не решена.
Других решений пока нет …