Im使用节点-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')我收到以下错误消息:
错误:解密期间的错误(可能是不正确的密钥)。原版错误: error: Error: 0407008A:在NodeRSA.module.exports.NodeRSA上的rsa routines:RSA_padding_check_PKCS1_type_1:invalid填充。$decryptKey (/home/runner/node_modules/node-rsa/src/NodeRSA.js:301:19) at NodeRSA.module.exports.NodeRSA.decryptPublic (/home/runner/node_modules/node-rsa/src/NodeRSA.js:267:21) at Script.runInContext。vm.js:133:20) at Object.runInContext (vm.js:311:6) at ReadStream (/run_dir/vm.js:311:6:133:14)。(/run_dir/pl.js:116:5) ReadStream.emit (events.js:198:13) at addChunk (_stream_readable.js:288:12) at readableAddChunk (_stream_readable.js:269:11)
我怎么才能解决这个问题?
谢谢。
发布于 2019-10-05 07:11:50
你用错钥匙解密了。
你应该用私钥。
key.decrypt(buffer, [encoding]);而不是您当前的公钥:
key.decryptPublic(buffer, [encoding]); // use public key for decryptionRSA通常以公钥加密,用私有解密。
发布于 2021-04-06 15:13:07
设encryptedText = encrypted.toString("base64");
让readPrivateKey =fs.readFileSync(“./key.txt”,"utf-8");让解密= privateDecrypt(readPrivateKey,decryptBuffer);
这就解决了加密和解密的编码方案应该是相同的问题。
https://stackoverflow.com/questions/58245203
复制相似问题