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

Blazor.SubtleCrypto加密内容在.NET 6中解密时验证标签不匹配问题

解决AES-GCM解密时验证标签不匹配的问题

常见原因及排查修复步骤

1. 未处理附加认证数据(AAD)

如果前端使用SubtleCrypto加密时传入了additionalData参数,后端解密时必须传入完全相同的AAD,否则标签验证会直接失败。检查前端加密逻辑,若存在AAD,后端需在解密时补充该参数:

// 示例:假设前端使用的AAD为固定字符串"app-specific-aad"
var aad = Encoding.UTF8.GetBytes("app-specific-aad").AsSpan();
aes.Decrypt(iv, cipherBytes, tag, plainBytes, aad);

2. 加密后的数据拼接顺序不匹配

SubtleCrypto的AES-GCM加密仅返回密文,IV和标签需要手动拼接,不同实现的拼接顺序可能不同:

  • 若前端采用密文 + IV + 标签的顺序,后端需调整拆分逻辑:
var cipherSize = encryptedData.Length - ivSizeBytes - tagSizeBytes;
var cipherBytes = encryptedData.Slice(0, cipherSize);
var iv = encryptedData.Slice(cipherSize, ivSizeBytes);
var tag = encryptedData.Slice(cipherSize + ivSizeBytes);

建议在前端打印IV、密文、标签的字节长度,和后端拆分后的长度对比,确认顺序一致性。

3. 密钥或编码一致性问题

  • 验证前后端密钥完全一致:将Base64解码后的密钥字节数组打印长度,确认是32字节(对应256位AES,你的密钥解码后符合要求)
  • 确认前端明文采用UTF-8编码,后端解密后也用UTF-8解码(你的代码已满足)

4. 标签长度不匹配

SubtleCrypto默认标签长度为128位(16字节),你的代码设置正确。若前端手动指定了其他长度(如96位=12字节),需同步修改后端的tagSizeBytes值。

快速验证拆分逻辑

在解密前添加日志,确认各部分长度匹配:

Console.WriteLine($"加密数据总长度:{encryptedData.Length}");
Console.WriteLine($"拆分后IV长度:{iv.Length},密文长度:{cipherBytes.Length},标签长度:{tag.Length}");
Console.WriteLine($"预期总长度:{ivSizeBytes + cipherSize + tagSizeBytes}");

若总长度不匹配,说明拆分逻辑错误,需根据前端拼接顺序调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:20:47