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

Chrome/Edge v20版本Cookie AES解密失败问题求助

Chrome 127版本Cookie V20加密解密失败问题分析与修复

核心问题根源

Chrome 127升级到Cookie V20加密标准后,解密逻辑未适配以下关键变化,导致解密后字节流无法通过UTF-8解码:

  • 加密模式从AES-CBC改为AES-GCM
  • Cookie格式新增版本标识、HMAC校验字段
  • 密钥派生的信息字段从v10改为v20

具体问题点拆解

  1. 格式解析错误
    V20的Cookie结构为v20|<版本字节>|<base64编码IV>|<base64编码加密数据>|<base64编码HMAC>,若仍按V10的v10|<IV>|<加密数据>格式切割,会把HMAC校验字节混入解密数据,导致解密结果包含无效UTF-8字节,触发'utf-8' codec can't decode byte 0xf0...错误。

  2. 加密模式不匹配
    V10使用AES-CBC+PKCS#7填充,V20改用AES-GCM(带认证标签的加密模式)。如果代码仍用CBC模式解密,结果必然是乱码,无法转成有效字符串。

  3. 密钥派生逻辑未更新
    V20的密钥派生使用HKDF-SHA256,信息字段固定为v20,若仍用V10的v10信息字段派生密钥,解密时会用错误密钥导致结果乱码。

修复步骤

1. 适配V20格式解析

import base64

def parse_v20_cookie(cookie_str):
    parts = cookie_str.split('|')
    if parts[0] != 'v20':
        return None, None  # 非V20格式直接返回
    # 提取IV和加密数据并解码
    iv = base64.b64decode(parts[2])
    encrypted_data = base64.b64decode(parts[3])
    # HMAC字段用于校验,无需传入解密流程
    return iv, encrypted_data

2. 更新为AES-GCM解密逻辑

V20的加密数据包含密文+16字节GCM认证标签,需拆分后解密:

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend

def decrypt_aes_gcm(key, iv, encrypted_data):
    # 拆分密文和GCM认证标签(最后16字节)
    ciphertext = encrypted_data[:-16]
    tag = encrypted_data[-16:]
    cipher = Cipher(algorithms.AES(key), modes.GCM(iv, tag), backend=default_backend())
    decryptor = cipher.decryptor()
    return decryptor.update(ciphertext) + decryptor.finalize()

3. 修正密钥派生逻辑

import hashlib
from cryptography.hazmat.primitives.kdf.hkdf import HKDF

def derive_v20_key(master_key):
    hkdf = HKDF(
        algorithm=hashlib.sha256(),
        length=32,
        salt=b'saltysalt',
        info=b'v20',  # 关键:V20专属信息字段
    )
    return hkdf.derive(master_key)

4. 完整解密流程示例

# 假设已提取到Chrome的master_key和目标Cookie值
master_key = b"<你的master_key字节>"
cookie_value = "v20|1|<base64_iv>|<base64_encrypted_data>|<base64_hmac>"

iv, encrypted_data = parse_v20_cookie(cookie_value)
v20_key = derive_v20_key(master_key)
decrypted_bytes = decrypt_aes_gcm(v20_key, iv, encrypted_data)
# AES-GCM解密结果无填充,直接转UTF-8
decrypted_str = decrypted_bytes.decode('utf-8')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:28:09