解密GPG消息时的MDC错误
-
03-10-2019 - |
题
我有一个客户和服务器系统,该系统定期运行计划的任务,并通过GPG加密的XML文件进行通信。所有必需的公共密钥都在客户端和服务器之间成功交换。加密和解密调用是从批处理文件完成的。
加密语法
gpg.exe-批量 - YES-录制%1-输出%4- passphrase%5-局部 - 用户%2 - sign-engrypt%3
解密语法
gpg.exe - 批量 - 是 - 输出%3- passphrase%4--少年%2 2>%1
该客户端创建一个XML文件,使用服务器公共密钥对GPG进行加密,使用私钥签名并将其上传到服务器的FTP站点。服务器定期检查FTP文件夹中的新文件。对于任何新文件,它使用GPG解密,然后在文件中处理XML。
对于服务器试图解密的某些XML文件,我收到一个错误,如下:
gpg:block_filter 00AA8400:阅读错误(size = 7841,a-> size = 395)
GPG:带有无效编码的MDC_Packet
GPG:解密失败:无效数据包
gpg:block_filter:待处理字节!
要注意的要点是,这并不是所有文件中都没有发生,而是只有一些文件。我找不到失败的文件之间的任何共同点。
这个错误是否熟悉?欢迎任何帮助跟踪这一点的建议。
解决方案
终于弄清楚了。 GPG不是这里的罪魁祸首。当服务器在指定文件夹中检查文件时,它使用Delphi上的附录(FileHandler)方法来测试是否可以打开文件。但是该方法具有特殊的条件,好像它在文件的最后128个字节块中找到了ASCII字符26(IE CTRL+Z)一样,它将从该字符中删除所有内容直到文件末尾。这导致删除加密文件的某些部分,并随后在通过GPG解密时引起上述错误。在我用重置(fileHandler)替换附录方法后,不再修改了加密文件,解密工作正常。