OpenPGPJS:用于解密的无效会话密钥

时间:2017-05-22 04:35:20

标签: javascript encryption openpgp.js

当我尝试使用私钥解密某些装甲数据时,OpenPGP JS会引发以下错误: 未捕获(在承诺中)错误:解密消息时出错:用于解密的会话密钥无效。 on 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);
    });
}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。要解决此问题,请对使用base64加密的结果进行编码。然后可以根据需要通过Internet发送该base64字符串。要解密时,只需先解密base64,然后再解密

等待openpgp.message.readArmored(Base64.decode(encData))

会起作用!