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

How to correctly implement Web Crypto API generateKey and exportKey?

大家好!

我有这个代码:

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>} 更新浏览器 window.

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'.

我有两个问题

我读自:SubtleCrypto MDN Web Docs

您的 API 用法看起来是正确的。您收到错误 'SubtleCrypto': parameter 2 is not of type 'CryptoKey',因为 parameter 2 的类型为 Promise。要解决此问题,请先解决来自 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])

两个例子是等价的