如何正确实现 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'.
我有两个问题
使用给定参数生成密钥的正确方法是什么?
以 JSON 格式导出生成的密钥的正确方法是什么?
您的 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])
两个例子是等价的
大家好!
我有这个代码:
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'.
我有两个问题
使用给定参数生成密钥的正确方法是什么?
以 JSON 格式导出生成的密钥的正确方法是什么?
您的 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])
两个例子是等价的