【问题标题】:web crypto api - how to export key pair?web crypto api - 如何导出密钥对?
【发布时间】:2020-06-16 09:11:18
【问题描述】:

这是我到目前为止从密钥对导出公钥和私钥的方法:

let pub = await crypto.subtle.exportKey("spki", keyPair.publicKey);
let prv = await crypto.subtle.exportKey("spki", keyPair.privateKey);

这导致两个单独的数组缓冲区保存我的公钥和私钥。

我想了解如何一次将整个密钥对导出到单个数组缓冲区中?

类似这样的:

let pair = await crypto.subtle.exportKeyPair("spki", keyPair);

是否有 web api 和格式?

否则有没有一种安全的方法将两个数组缓冲区(导出的公钥和私钥)连接在一起,以便在导入时可以再次拆分它们?然后,在导入导出的密钥对时,我需要一些机制来处理格式错误的输入。

我必须这样做,因为我的界面要求我返回一个数组缓冲区。

【问题讨论】:

  • 您需要分别导出私钥和公钥,然后将结果拼接起来,例如base64,或者使用PEM等标准格式。
  • @pedrofb 感谢您的意见。我手动连接了两个缓冲区并将第一个缓冲区的长度添加到开头,以便在导入时可以正确拆分它。我想使用标准格式,是否有用于以 PEM 格式导出的 Web API?
  • PEM 是一种相对简单的格式。您可以使用库或自己转换密钥。见stackoverflow.com/a/40327542/6371459

标签: javascript cryptography arraybuffer webcrypto-api uint8array


【解决方案1】:

我发现我可以使用以下代码导出公钥。我还没有弄清楚私钥。我还根据以下代码构建了这个示例:
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/exportKey#subjectpublickeyinfo_export

const exported = pub;
const exportedAsString = String.fromCharCode.apply(null, new Uint8Array(exported));
const exportedAsBase64 = window.btoa(exportedAsString);
const pemExported = '-----BEGIN PUBLIC KEY-----\n'+exportedAsBase64+'\n-----END PUBLIC KEY-----`;
console.log("Public Exported Key: ", pemExported);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 2022-10-18
    • 1970-01-01
    • 2020-05-24
    • 2013-03-12
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    相关资源
    最近更新 更多