Nodejs Генерация ключей для подписи части данных - PullRequest
0 голосов
/ 11 января 2019

У меня есть некоторые данные BLOB, например:

const buffer = Buffer.from('ACDFF12BA','hex');

Как я могу сгенерировать ключи, чтобы подписать его?

1 Ответ

0 голосов
/ 11 января 2019

Один из способов сделать это - использовать пакет 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 недоступен (например, в электронных приложениях)

...