#javascript #c# #node.js #cryptography
Вопрос:
Мне нужна твоя помощь. У меня есть пример C#, как подписать дайджест сообщения
signatureFormatter.SetHashAlgorithm("SHA1");
string keyText = Convert.ToBase64String(_certificate.PrivateKey);
byte[] signature = signatureFormatter.CreateSignature(hash);
return signature;
Later it converts it to base64:
Convert.ToBase64String(signature)
Мне нужно достичь того же результата с помощью встроенной библиотеки node crypto, что я написал:
const crypto = require('crypto');
...
const sig = crypto.createSign('RSA-SHA1');
sig.update(hashValue, 'hex');
sig.end();
const signature = sig.sign(privateKeyString, 'base64');
В результате я получаю разные подписи для одного и того же хэша, пожалуйста, помогите мне, как решить эту проблему
*** Обновление ***
Оригинальная функция C#
private byte[] CreateSignature(byte[] hash)
{
RSAPKCS1SignatureFormatter signatureFormatter = new RSAPKCS1SignatureFormatter(_certificate.PrivateKey);
signatureFormatter.SetHashAlgorithm("SHA1");
byte[] signature = signatureFormatter.CreateSignature(hash);
return signature;
}
Обновление node.js функция
const hashValue= '332a400fdab5b01efcd8407c61987495270ec1b6';
const sig = crypto.createSign('RSA-SHA1');
sig.update(Buffer.from(hashValue, 'utf-8'));
sig.end();
const sign = sig.sign(privateKeyString, 'base64');
Комментарии:
1. Вы кодируете хэш-значение шестнадцатеричным кодом, но вы не делаете этого в коде C#. Вы никогда не будете подписывать шестнадцатеричные цифры, вы подписываете сами байты . Шестнадцатеричный != байт.
2. @MaartenBodewes большое вам спасибо за ваш ответ, не могли бы вы, пожалуйста, помочь мне это исправить? Я обновил вопрос, добавил исходную функцию и как в настоящее время я пытаюсь преобразовать ее в node.js. Я взял переменную «hashValue», преобразованную в массив шестнадцатеричных байтов из примера C#
3. @MaartenBodewes попытался использовать буфер, но он все равно возвращает неправильную подпись