Один из способов сделать это - использовать пакет keypair
npm:
const keypair = require('keypair');
const crypto = require('crypto');
const pair = keypair();
// Create Transmitted Signature
const sign = crypto.createSign('RSA-SHA256');
sign.update('abcdef'); // data from your file would go here
const sig = sign.sign(pair.private, 'hex');
console.log(sig);
// Verifying Signature
const verify = crypto.createVerify('RSA-SHA256');
verify.write('abcdef');
verify.end();
console.log(verify.verify(pair.public, sig,'hex'));
Как вы можете видеть, используя функцию keypair()
, я генерирую открытый и закрытый ключи, а sign.sign
я генерирую подпись. Имейте в виду, чтобы подписать с закрытым ключом. Сгенерирован открытый ключ в следующем формате:
--- RSA BEGIN PUBLIC KEY ---
^some base64 here^
--- RSA END PUBLIC KEY ---
И сгенерированный закрытый ключ будет иметь такой же формат:
--- RSA BEGIN PRIVATE KEY ---
^some base64 here^
--- RSA END PRIVATE KEY ---
Теперь единственное, что нужно сделать, - это преобразовать буфер в шестнадцатеричную строку и выполнить работу. Имейте в виду, что принимающая сторона должна также проверить данные в виде шестнадцатеричной строки.
Мы можем проверить подпись с помощью verify.verify
и открытым ключом. Имейте в виду и формат подписи. Если вы генерируете шестнадцатеричную подпись, проверьте ее в том же формате.
Также вышеописанная методика рекомендуется, когда нативный crypto.generateKeyPair
недоступен (например, в электронных приложениях)