Я пытаюсь использовать криптомодуль Node.js для проверки подписи некоторых данных. Я использую Node.js 0.8.0.
Данные в файле были хешированы с использованием алгоритма MD5 и подписаны с использованием закрытого ключа RSA, а подпись сохранена в отдельный файл. Все это было сделано с использованием библиотек Java.
Если я использую openssl для проверки подписи, это будет успешно, используя:
openssl dgst -verify mykey.pem -signature example.sig hello.txt
Он отвечает Verified OK
. Если я изменяю один символ hello.txt, он не проверяется. Я могу добавить параметр -MD5 к приведенной выше команде, и она все равно будет работать, но я предполагаю, что это значение по умолчанию, но если я скажу -MD4 или -SHA, это не проверит. Это все хорошо.
Если я затем попытаюсь использовать криптомодуль Node, который обертывает openssl, я не смогу заставить эту проверку работать.
Мой пример кода:
var crypto = require("crypto");
var fs = require("fs");
var data = fs.readFileSync("./hello.txt");
var pubkey = fs.readFileSync("./mykey.pem", "utf8");
var signature = fs.readFileSync("./example.sig");
var verifier = crypto.createVerify ('RSA-MD5');
verifier.update (data);
var success = verifier.verify (pubkey, signature);
console.log(success);
Это всегда выводит false
. Я пробовал:
Я неправильно понимаю, что мой код выполняет ту же операцию, что и показанная здесь командная строка openssl? Любые предложения о том, как решить эту проблему?
Обновление :Я также пытался использовать самоподписанный -доверенный сертификат, а не просто ключ. Я подтвердил, что openssl проверяет сертификат, но криптобиблиотека узла не проверяет файл.