首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自PEM的SubtleCrypto importKey

来自PEM的SubtleCrypto importKey
EN

Stack Overflow用户
提问于 2019-02-18 07:48:01
回答 1查看 2.9K关注 0票数 3

我正在尝试使用Ionic中的SubtleCrypto Web来使用公钥加密数据。我将导入PEM格式的密钥,然后将其传递到window.crypto.subtle.importKey,然后将结果使用到window.crypto.subtle.encrypt中。

看起来window.crypto.subtle.importKey有一个问题--当我试图导入密钥时,我得到了一个Uncaught (in promise): DataError

我目前正在使用以下方法导入密钥:

代码语言:javascript
复制
//Get the public key in CryptoKey format
let importedPublicKey = await window.crypto.subtle.importKey(
    "pkcs8",
    this.pemPublicToArrayBuffer(serverPublicKey),
    {
        name: "RSA-OAEP",
        hash: {name: "SHA-256"}
    },
    true,
    []
);

private pemPublicToArrayBuffer(pem) {
  var b64Lines = this.removeLines(pem);
  var b64Prefix = b64Lines.replace('-----BEGIN PUBLIC KEY-----', '');
  var b64Final = b64Prefix.replace('-----END PUBLIC KEY-----', '');

  return this.base64ToArrayBuffer(b64Final);
}

private base64ToArrayBuffer(b64) {
  var byteString = window.atob(b64);
  var byteArray = new Uint8Array(byteString.length);
  for (var i = 0; i < byteString.length; i++) {
    byteArray[i] = byteString.charCodeAt(i);
  }

  return byteArray;
}

有人可能知道为什么密钥导入与PEM公钥失败吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-13 09:01:15

我自己花了相当长的时间来克服这个错误,现在我可以给你(和其他人)一些好的建议。

  1. 您将"pkcs8“作为格式传递给importKey方法,但是如果要导入公钥,格式可能是"spki”(SubjectPublicKeyInfo) --一种特殊的公钥格式,而"pkcs8“则应该用于私钥。这就引出了下一个问题:
  2. 你从哪弄到这把钥匙的?如果您使用OpenSSL cli (openssl -pubout -in priv.pem -out pub.pem)导出公钥,那么您将得到"spki“格式的密钥(默认格式)。
  3. 如果要导入公钥,则应将"encrypt“作为”用例“参数传递给importKey (而不是空数组),否则将导致以下错误之一:"SyntaxError:无法使用指定的密钥使用创建密钥”(为密钥指定错误用法)或"InvalidAccessError: key.usages不允许此操作“(空的使用数组)。这里要记住的是,公钥只能用于“加密”,私钥只能用于“解密”。不过,我还没有尝试导入密钥对,但据我所知,您应该将"pkcs8“作为格式传递,并将”加密“、”解密“传递给用户。
  4. 即使您正确地设置了上述所有内容,您仍然可能会得到"Uncaught (在承诺中):DataError",对我来说,这是由于格式不匹配,我一直在用"spki“参数传递一个PKCS#1 RSAPublicKey格式的键。因此,您可能应该从检查您的密钥开始,以获得准确的格式和算法细节。

希望这能帮上忙。伊万

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54742554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档