Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 解密GPG消息时发生mdc错误_Security_Encryption_Gnupg_Mdc - Fatal编程技术网

Security 解密GPG消息时发生mdc错误

Security 解密GPG消息时发生mdc错误,security,encryption,gnupg,mdc,Security,Encryption,Gnupg,Mdc,我有一个客户机和服务器系统,定期运行计划任务,并通过gpg加密的xml文件进行通信。客户端和服务器之间已成功交换所有必需的公钥。加密和解密调用是从批处理文件执行的 加密语法 gpg.exe--批处理--是--收件人%1--输出%4--密码短语%5--本地用户%2--签名--加密%3 解密语法 gpg.exe--批处理--是--输出%3--密码短语%4--解密%2>%1 客户端创建一个xml文件,使用服务器公钥用gpg对其进行加密,使用私钥进行签名,然后将其上载到服务器的ftp站点。服务器定期检查

我有一个客户机和服务器系统,定期运行计划任务,并通过gpg加密的xml文件进行通信。客户端和服务器之间已成功交换所有必需的公钥。加密和解密调用是从批处理文件执行的

加密语法

gpg.exe--批处理--是--收件人%1--输出%4--密码短语%5--本地用户%2--签名--加密%3

解密语法

gpg.exe--批处理--是--输出%3--密码短语%4--解密%2>%1

客户端创建一个xml文件,使用服务器公钥用gpg对其进行加密,使用私钥进行签名,然后将其上载到服务器的ftp站点。服务器定期检查ftp文件夹中的新文件。对于任何新文件,它都使用gpg进行解密,然后处理文件中的xml

对于服务器试图解密的某些xml文件,我收到如下错误:

gpg:block_filter 00AA8400:读取错误(大小=7841,a->size=395)

gpg:编码无效的mdc_数据包

gpg:解密失败:无效数据包

gpg:块过滤器:挂起的字节

需要注意的是,这并不是发生在所有文件上,而是发生在一些文件上。我还没有找到它失败的文件之间的任何共同点


有人熟悉这个错误的含义吗?欢迎提供任何有助于追踪此事的建议。

终于找到了答案。gpg不是罪魁祸首。当服务器检查指定文件夹中的文件时,它使用Delphi上的Append(fileHandler)方法来测试文件是否可以打开。但是这个方法有一个特殊的条件,好像它在文件的最后128字节块中找到了ascii字符26(即CTRL+z),它将从该字符中删除所有内容,直到文件结束。这导致部分加密文件被删除,并在通过gpg解密时导致上述错误。在我用Reset(fileHandler)替换Append方法之后,加密文件不再被修改,解密工作也很完美