我有一个客户和服务器系统,该系统定期运行计划的任务,并通过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)替换附录方法后,不再修改了加密文件,解密工作正常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top