OpenPGP JS在尝试使用私钥解密某些装甲数据时会抛出以下错误:未捕获(承诺中(错误:解密消息时出错:用于解密的会话密钥无效。at onError (openpgp.min.js:16057( onError @ openpgp.min.js:16057
据我从谷歌可以看出,这意味着加密出了问题,但我无法说出它是什么。更糟糕的是,它似乎与某些文件不一致(似乎在同一时间加密?(以这种方式失败。加密消息似乎没有以任何方式格式不正确。
如果有人有任何调试技巧,将不胜感激。什么可能会引发此错误?我的代码摘录如下,主要基于 openPGPJS 示例代码。
有关我的代码正在做什么的额外信息,图像文件在客户端加密,上传到服务器,下载到其他地方,然后解密。
function encryptData(data) {
var openpgp = window.openpgp;
var options, encrypted;
var pubkey = `-----BEGIN PGP PUBLIC KEY BLOCK-----...-----END PGP PUBLIC KEY BLOCK-----`;
options = {
data: data,
publicKeys: openpgp.key.readArmored(pubkey).keys
};
return openpgp.encrypt(options);
}
function decryptPGP(encData, doneFunc) {
var privkey = `-----BEGIN PGP PRIVATE KEY BLOCK-----...-----END PGP PRIVATE KEY BLOCK-----`;
var pubkey = `-----BEGIN PGP PUBLIC KEY BLOCK-----...-----END PGP PUBLIC KEY BLOCK-----`;
var passphrase = '...';
var privKeyObj = openpgp.key.readArmored(privkey).keys[0];
privKeyObj.decrypt(passphrase);
options = {
message: openpgp.message.readArmored(encData),
publicKeys: openpgp.key.readArmored(pubkey).keys,
privateKey: privKeyObj
};
openpgp.decrypt(options).then(function(plaintext) {
doneFunc(plaintext.data);
});
}
我遇到了同样的问题。若要解决此问题,请使用 base64 对加密结果进行编码。然后,该base64字符串可以根据需要通过互联网发送。当您要解密时,只需先解密base64,然后再解密
await openpgp.message.readArmored(Base64.decode(encData((
会工作!