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

C#实现AES-GCM无IV解密苹果钥匙串备份数据求助

苹果钥匙串AES-GCM解密:无IV场景的C#实现问题

我正在研究苹果钥匙串备份相关内容,当前需要用AES-GCM解密一段数据。我手头有解密密钥、GCM认证标签和密文,但没有IV。

之前看到一段Go代码里调用gcm.Open时传入了null作为IV,这打破了我对AES-GCM的认知——原本以为这种情况是不合法的。后来把数据放到CyberChef里,只填密钥、密文和认证标签,留空IV字段(推测用的是空字符串字节),居然成功解密了。

我尝试在C#里实现这个解密功能,但多次都出现MAC校验异常。试过传入空的byte[12]作为IV,没用。当前用BouncyCastle的代码如下:

var keyParam = ParameterUtilities.CreateKeyParameter("AES", unwrappedKey);
var parameters = new ParametersWithIV(keyParam, new byte[12]);
var cipher = CipherUtilities.GetCipher("AES/GCM/NoPadding");
cipher.Init(false, parameters);
var decrypted = cipher.DoFinal(encrypted);

我现在搞不懂:是不是AES-GCM其实支持无IV解密?还是IV嵌在密文里了?或者我对AES-GCM的理解有偏差?


补充信息

看起来苹果针对钥匙串信息用的是null IV,得自定义GCM解密实现才行。参考了一段Python的GCM实现逻辑,现在需要在C#里复刻类似逻辑。

可用于测试的解密数据如下:

  • 密钥:DD24A01473D859BA6E27640C982BE5CA9CA41F0928CEBA4BA404DE4FAD5F7FD3
  • 认证标签:89EA2B7232F5B053BB8EEB32534C52DC
  • 密文:4A13C29326CF3CC34F9218BF1DAFE602AED65D2F81386769EE87086DAAF10884A18D8618DE185599DC23355E02DC55F635F3AB5CC14066FF67438628B2AE589C5BFB0946F51866CCDA7AA81FC2860CBAB84A8F9B057CAA77D0BC82896171527E6DDC22D16B72A7F904DE13D3C8452A6B75893D069D5D2561C4D5B604AA927EDC0A22198338E86263698FA42BB7D5C777718D9C66F8148C444F0DDA08590BA629D1CE34CFA7ECBAE8C592A3026084F7AFBF331EAFA411EC138BAF06B19E6962A531EFCD983059567DB683B8CBE5121B2ECB86165DB5D3C143AFAF6A3AB2E317B424C670481C625C8199421E143C70E195A56B8A30DB46FB1463DE5319409C2B4C0C9C9516F3394FE58DDBE7370DAE7EE21A9172AC9C7A48C8F27C42DBC9BED0CD092A9BA7E4C8B695A295C6DD03E30A69B152F5F43E06C2989F09CC98FA6F767EE93D66F63606416A940A4C5988B8688EEFFF331CD36E7AA7811B9B778B37C72A3EEC58A639F9F605B31226E08947

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:04:53