You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解密经HKDF派生密钥的AES-GCM加密MSAL认证工件?

如何解密@azure/msal-browser v4版本加密的localStorage认证工件?

我的项目使用了@azure/msal-browser。此前存储在localStorage中的账户信息存在被利用的风险,v4版本中这一情况得到改善:

若使用localStorage作为缓存位置,认证工件将通过HKDF派生密钥,再以AES-GCM算法加密

我现在的问题是:如何解密这些认证工件?

我已获取以下信息:

  • 从msal.cache.encryption会话cookie中得到的原始密钥(示例:"E_WMCrIIYBWra4rBWM7yMNvVS8e5Rc_A8QyIhfchI2U")
  • 从localStorage中someGuidA.someGuidB-login.windows.net-someGuidB项获取的加密数据(约6k长度的字符串)
  • 同样从上述localStorage项中获取的nonce(示例:"5DW6Kh6QWnp5Nlt8GWitVA")

我尝试了以下代码:

function toArrayBuffer(inputStr) {
    const len = inputStr.length;
    const bytes = new Uint8Array(len);
    for (var i = 0; i < len; i++)        {
        bytes[i] = inputStr.charCodeAt(i);
    }
    return bytes.buffer;
}

async function getCryptoKey(inputRawKey) {
    const keyBuffer = toArrayBuffer(inputRawKey);
    return await window.crypto.subtle.importKey(
        "raw",
        keyBuffer,
        { name: "HKDF" },
        false,
        ["deriveKey"]
    );
}

async function decryptData(inputCryptoKey, inputData) {
    const encryptedArrayBuffer = toArrayBuffer(inputData);
    return await window.crypto.subtle.decrypt(
        {
            name: "AES-GCM",
            iv: encryptedArrayBuffer.slice(0, 12),
            tag: encryptedArrayBuffer.slice(-16), // authentication tag
        },
        inputCryptoKey,
        encryptedArrayBuffer.slice(12, -16)
    );
}

const cryptoKey = await getCryptoKey(rawKey);
const res = await decryptData(cryptoKey, data); // fails

运行后出现如下错误:

Uncaught InvalidAccessError: key.algorithm does not match that of operation

这个错误逻辑通顺,我推测问题出在未正确还原HKDF派生密钥上——需要在getCryptoKey函数中同时结合"AES-GCM"和"HKDF"。另外,nonce显然要用于某个参数,可能是替换iv参数,但目前还没到这一步。

我已查阅以下资料:

  • Web Cryptography API Examples
  • How to C#.NET encrypt() then JS WebCryptoApi decrypt() using AES-GCM?
  • Crypto Subtle Decrypt Parameter Not Type "CryptoKey"

内容的提问来源于stack exchange,提问作者fservantdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:54:55