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

C++中BCryptDecrypt二次调用返回0xc000000d错误求助

C++中第二次调用BCryptDecrypt()返回错误0xc000000d,AES-GCM解密失败

问题描述

在C代码中使用BCrypt进行AES-GCM解密时,第二次调用BCryptDecrypt()会返回错误码0xc000000d(STATUS_INVALID_PARAMETER)。已知代码存在潜在问题,但测试中未触发其他失败点。对比可正常运行的C#版本,调试显示两者缓冲区数据及各步骤返回值均一致,仅C的二次BCryptDecrypt调用失败。

需求明确:仅使用BCrypt库完成解密,通过密文块中的密钥解密AES-GCM加密内容,已有可正常运行的C#实现,不引入OpenSSL等额外库。

测试可用信息

  • 密钥处理流程:Base64解码给定密钥字符串,跳过开头5字节的"DPAPI"标识后,调用CryptUnprotectData()获取实际解密密钥
  • Base64编码的AES-GCM密文:
RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAADeBU2aOO6lQ73DYvrL8hhAAAAAAAIAAAAAABBmAAAAAQAAIAAAALXsSijRcSAV3S8PSvKZXUddV2eE+nv5xtn8JaePfpjrAAAAAA6AAAAAAgAAIAAAAJ96r2xQdEkkXuEaGEcVG24QJSKXG9s14w/yS8gdO/CxMAAAABs64+DTxkrQnkH1e3d0w/tOPIRrB1OBPrw4uxX4Q0AfYv6pyMZKXchhn1qol8bMvUAAAADisCS/m6UBBzMxVLBgpCvQsGIa6hYT/J8NGZuFOqydlstlxLBL2K8tCX550IoHtwuEA8EGJTxMsW6wh/0H3VRn

(注:此为CTF项目密钥,允许解密)

已尝试的解决方法

  • 将std::vector替换为HeapAlloc分配内存
  • 调整BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO结构的参数设置
  • 修改BCryptSetProperty的参数配置
  • 参考GitHub上成熟的C++ AES-GCM BCrypt实现
  • 使用GPT生成多种代码版本测试

以上方法均未解决问题,请求协助排查错误原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:01:55