devlog 5/20/26

75 3

# Web Crypto API 小坑:wrapKey 报错,原来是我把门锁死了

用浏览器的 `crypto.subtle` 给密钥做安全包装,结果踩了个小坑,记录一下。

事情很简单:我想用 `wrapKey()` 把一个 AES-GCM 密钥打包存起来。代码大概是这样的:

```javascript
// 生成密钥,extractable 设成了 false
const secretKey = await crypto.subtle.generateKey(
  { name: "AES-GCM", length: 256 },
  false,
  ["encrypt", "decrypt"]
);

// 用主密钥去包装它
const wrappedKey = await crypto.subtle.wrapKey(
  "raw",
  secretKey,
  masterKey,
  "AES-KW"
);
```

然后浏览器直接抛 `InvalidAccessError`。

第一反应是检查参数,格式、算法、包装密钥的权限,都没问题。查了文档才搞明白:`wrapKey()` 的执行过程是先导出密钥的原始数据,再用包装密钥去加密。而 `extractable: false` 的意思就是"不允许导出",等于自己把路堵死了。

所以这个密钥虽然是我自己生成的,但一旦设了不可提取,`wrapKey` 也拿它没办法。

这家伙太懒了,什么也没留下。
最新回复 ( 3 )
  • 2
    0
    bro,提醒一下,萌社区不支持markdown哦
  • 3
    0
    滚来滚去……~(~o ̄▽ ̄)~o 。。。滚来滚去……o~(_△_o~) ~。。。
  • 0
    虽然看的稀里糊涂,不过棒棒哒加油
    滚来滚去……~(~o ̄▽ ̄)~o 。。。滚来滚去……o~(_△_o~) ~。。。
  • 游客
    5

    您需要登录后才可以回帖

    登录 注册

发新帖