如何正确实现Web Crypto API generateKey和exportKey?

问题描述 投票:0回答:1

大家好!

我有此代码:

async function generateKey() {
  const algoritm = { name: "AES-CBC", length: 256 };
  const exportable = true;
  const usage = ['encrypt'];
  return await window.crypto.subtle.generateKey(algoritm, exportable, usage).then(key => { return key; 
  });
}

当我调用console.log(generateKey());我得到:第一次加载时为>Promise,更新浏览器窗口时为>Promise {<pending>}

async function exportKey(key) {
  const format = "jwk";
  return await window.crypto.subtle.exportKey(format, key).then(key => { return key; });
}

当我打电话给let key =generateKey(); console.log(exportKey (key));时,我得到:'SubtleCrypto': parameter 2 is not of type 'CryptoKey'.

我有两个问题

  • 用给定参数生成密钥的正确方法是什么?

  • 以JSON格式导出生成的密钥的正确方法是什么?

我来自:SubtleCrypto MDN Web Docs

javascript cryptography cryptoapi
1个回答
0
投票

您的API使用情况看起来正确。由于'SubtleCrypto': parameter 2 is not of type 'CryptoKey'的类型为[[Promise,因此出现错误parameter 2。要解决此问题,请先解决generateKey中的承诺,然后再将其传递给exportKey

const main = async () => { const key = await generateKey() const exported = await exportKey(key) console.log(exported) }
当然,如果您使用我的库rubico,这会变得更加简单>

const { pipe } = require('rubico') const main = pipe([generateKey, exportKey, console.log])

这两个例子是等效的。
© www.soinside.com 2019 - 2024. All rights reserved.