Предполагая, что path/to/my/file
- это файл, содержимое которого вам нужно проверить, вы должны предоставить его verifier.update()
. Попробуйте следующее:
const input = fs.readFileSync('path/to/my/file'); // load data contents
const publicKey = fs.readFileSync('keys/public_key.pem').toString(); // load the signature, as a string!
const verifier = crypto.createVerify('RSA-SHA256');
verifier.update(input); // provide data contents to the verifier
const testSignature = verifier.verify(publicKey, fileSignature, 'base64');
console.log("testSignature: \n" + testSignature);
Также убедитесь, что fileSignature
является строковым значением, а не Buffer . По какой-то причине, которую я до сих пор пытаюсь понять, почему, если вы передадите объект Buffer в verifier.verify
, он не будет работать:
const fileSignatureBuffer = fs.readFileSync('signature.sha256');
const fileSignatureString = fileSignatureBuffer.toString();
// load public key, create the verifier, provide data contents to verifier, etc.
const testSignature = verifier.verify(publicKey, fileSignatureBuffer); // false
const testSignature = verifier.verify(publicKey, fileSignatureString, 'base64'); // true
EDIT:
Если вы используете хеш в качестве входных данных для шага подписи, то вы должны передать тот же хеш на шаге проверки. Тогда код будет выглядеть следующим образом:
const publicKey = fs.readFileSync('keys/public_key.pem').toString(); // load the signature, as a string!
const verifier = crypto.createVerify('RSA-SHA256');
verifier.update(fileSignature); // provide the file signature to the verifier
const testSignature = verifier.verify(publicKey, fileSignature, 'base64');
console.log("testSignature: \n" + testSignature);