大家好!
我有此代码:
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格式导出生成的密钥的正确方法是什么?
您的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])
这两个例子是等效的。