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

C语言目录加解密工具处理大文件时报digital envelope routines bad decrypt错误

问题排查结论

1 rm删除文件失败原因

你的代码直接通过sprintf(str, "rm %s", abs_path)拼接shell命令执行删除,当文件路径包含空格、特殊符号时,路径会被shell拆分为多个参数,导致rm找不到目标文件。你报错中出现的/home/kali/.mozilla/firefox/Crash就是典型的文件名带空格被截断的情况。
修复方案:

  • 更推荐直接使用系统调用unlink(abs_path),完全规避shell解析的问题,性能更好也更安全
  • 如果要保留system调用,需要给路径包裹双引号:sprintf(str, "rm \"%s\"", abs_path)

2 解密失败(bad decrypt)核心原因

2.1 密钥生成逻辑存在栈缓冲区溢出bug

你在generate_key函数中生成IV时的参数传错:

// 错误写法:传了密钥长度sizeKey作为IV的生成长度
RAND_bytes(iv, sizeKey);
// 正确写法:应该传入IV的长度sizeIv
RAND_bytes(iv, sizeIv);

你的IV缓冲区大小只有AES_BLOCK_SIZE(16字节),但你传入了AES256密钥对应的长度32字节,直接造成栈缓冲区溢出,溢出的内容会覆盖栈上相邻存储的key变量,导致你转十六进制存储到服务端的key已经被篡改,解密时使用正确的字符串也无法匹配原始密钥,必然出现解密失败。

2.2 解密命令存在参数缺失问题

你执行的解密命令为:

sudo ./main -p /home/kali -d  28924fd9021642cee4002de561b52640

按照你给出的命令格式./main -p PATH -d KEY IV,-d参数后面应该跟随KEY和IV两个参数,但你实际只传了一个32位的十六进制字符串,缺少IV参数,解密时读取的IV是内存中的随机垃圾值,也会直接触发解密失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:03