下面的代码会抛出错误:
无法使用指定的密钥用法创建密钥。
const a = async () => { const key = await window.crypto.subtle.generateKey( { name: 'AES-GCM', length: 256, }, true, ['encrypt', 'decrypt', 'deriveKey'], ); }; a();
为什么会这样,我确实想生成一个密钥,以后可以导出。
我试图删除'deriveKey'用法,但后来当我导出它时,'permission error' throw
“我确实想生成一个密钥,以后可以导出。”
这没有任何意义。您要么现在创建一个密钥,要么稍后从“主密钥”派生它。此外,AES GCM 不能用于密钥派生。
"DeriveKey"
是生成的密钥可以用于的东西,而不是密钥本身的属性。
如果您有一个对称密钥,并且想从中派生出另一个密钥,那么您应该使用 HKDF。
您可以在 here 中看到可以使用哪些算法。然而,一种用于密钥协商,一种用于基于密码的密钥派生,似乎只有 HKDF 能满足您的需求。
您可以使用
DeriveKey
使用HkdfParams
作为第一个参数和"raw"
键作为第二个参数(等)。
Topaco 写了一个很好的答案,其中包括 HKDF here 的代码;别忘了投票。