Вы неправильно расшифровываете данные, аргумент encoding
для NodeRSA.prototype.decrypt(buffer, encoding)
- это требуемая кодировка результата, а не входная кодировка.
Хотя говорят, что метод расшифровки принимает буфер через JSDoc:
/**
* Decrypting data method with private key
*
* @param buffer {Buffer} - buffer for decrypting
* @param encoding - encoding for result string, can also take 'json' or 'buffer' for the automatic conversion of this type
* @returns {Buffer|object|string}
*/
Вы можете проследить код, чтобы увидеть, что если buffer
является строкой, предполагается, что она находится вbase64
кодировка:
buffer = _.isString(buffer) ? Buffer.from(buffer, 'base64') : buffer;
Мы можем упростить вашу проблему, проигнорировав взаимодействия с файловой системой, чтобы увидеть, как работает круговая передача:
const key = new NodeRSA().generateKeyPair();
// Encrypt the utf8 encoded input string and output a base64 encoded string
const encrypted = key.encrypt('test', 'base64');
console.log(encrypted);
// Decrypt the base64 encoded input string and output a utf8 encoded string
const decrypted = key.decrypt(encrypted, 'utf8');
console.log(decrypted);
В качестве альтернативы вы можете явно преобразовать входные данныеи вывод в и из буферов соответственно, это может помочь вам понять, что происходит под капотом:
const key = new NodeRSA().generateKeyPair();
const input = Buffer.from('test', 'utf8');
const encrypted = key.encrypt(input);
console.log(encrypted.toString('base64'));
const decrypted = key.decrypt(encrypted);
console.log(decrypted.toString('utf8'));