【问题标题】:OpenPGPJS: Invalid session key for decryptionOpenPGPJS:用于解密的会话密钥无效
【发布时间】:2017-10-21 15:09:16
【问题描述】:

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

【问题讨论】:

    标签: javascript encryption openpgp.js


    【解决方案1】:

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

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

    会起作用的!

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2018-12-16
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多