无法在nodejs中使用RSA / ECB / PKCS1正确加密数据
我使用node-rsa软件包对数据进行如下加密
const crypto = require('crypto')
const NodeRSA = require('node-rsa')
const path = require("path")
const fs = require("fs")
const absolutePath = path.resolve('./public_key.pem')
const publicKey = fs.readFileSync(absolutePath, "utf8")
var key = new NodeRSA();
key.importKey(publicKey, 'pkcs8-public');
key.setOptions({environment: 'node', encryptionScheme: 'pkcs1'});
const result = key.encrypt('{"message": "hello"}', 'base64')
但是现在当我尝试如下解密结果时:
key.decryptPublic(result, 'utf-8')
我收到以下错误消息:
错误:解密期间出错(可能是不正确的密钥)。原版的错误:错误:错误:0407008A:rsa例程:RSA_padding_check_PKCS1_type_1:无效的填充在NodeRSA.module.exports.NodeRSA。$$ decryptKey(/home/runner/node_modules/node-rsa/src/NodeRSA.js:301:19)在NodeRSA.module.exports.NodeRSA.decryptPublic(/home/runner/node_modules/node-rsa/src/NodeRSA.js:267:21)在evalmachine.:16:17在Script.runInContext(vm.js:133:20)在Object.runInContext(vm.js:311:6)在评估时(/run_dir/repl.js:133:14)在ReadStream。 (/run_dir/repl.js:116:5)在ReadStream.emit(events.js:198:13)在addChunk(_stream_visible.js:288:12)在readAddChunk(_stream_visible.js:269:11)
我该如何解决?
谢谢。
回答如下:您使用错误的密钥解密。
您应该使用私钥。
key.decrypt(buffer, [encoding]);
不是当前的公钥:
key.decryptPublic(buffer, [encoding]); // use public key for decryption
RSA通常作为公共流进行加密,通过私有进行解密。
无法在nodejs中使用RSA / ECB / PKCS1正确加密数据
我使用node-rsa软件包对数据进行如下加密
const crypto = require('crypto')
const NodeRSA = require('node-rsa')
const path = require("path")
const fs = require("fs")
const absolutePath = path.resolve('./public_key.pem')
const publicKey = fs.readFileSync(absolutePath, "utf8")
var key = new NodeRSA();
key.importKey(publicKey, 'pkcs8-public');
key.setOptions({environment: 'node', encryptionScheme: 'pkcs1'});
const result = key.encrypt('{"message": "hello"}', 'base64')
但是现在当我尝试如下解密结果时:
key.decryptPublic(result, 'utf-8')
我收到以下错误消息:
错误:解密期间出错(可能是不正确的密钥)。原版的错误:错误:错误:0407008A:rsa例程:RSA_padding_check_PKCS1_type_1:无效的填充在NodeRSA.module.exports.NodeRSA。$$ decryptKey(/home/runner/node_modules/node-rsa/src/NodeRSA.js:301:19)在NodeRSA.module.exports.NodeRSA.decryptPublic(/home/runner/node_modules/node-rsa/src/NodeRSA.js:267:21)在evalmachine.:16:17在Script.runInContext(vm.js:133:20)在Object.runInContext(vm.js:311:6)在评估时(/run_dir/repl.js:133:14)在ReadStream。 (/run_dir/repl.js:116:5)在ReadStream.emit(events.js:198:13)在addChunk(_stream_visible.js:288:12)在readAddChunk(_stream_visible.js:269:11)
我该如何解决?
谢谢。
回答如下:您使用错误的密钥解密。
您应该使用私钥。
key.decrypt(buffer, [encoding]);
不是当前的公钥:
key.decryptPublic(buffer, [encoding]); // use public key for decryption
RSA通常作为公共流进行加密,通过私有进行解密。