解密GPG消息时出现mdc错误

时间:2010-09-15 15:48:10

标签: security encryption gnupg mdc

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

加密语法

gpg.exe --batch --yes --recipient%1 - 输出%4 - passphrase%5 - local-user%2 --sign --encrypt%3

解密语法

gpg.exe --batch --yes --output%3 --passphrase%4 --decrypt%2 2>%1

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

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

  

gpg:block_filter 00AA8400:读取错误(尺寸= 7841,a->尺寸= 395)

     

gpg:mdc_packet,编码无效

     

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

     

gpg:block_filter:待定字节!

需要注意的是,所有文件都没有这种情况,但只有一些文件。我无法在失败的文件之间找到任何共性。

是否有人熟悉此错误的含义?我们欢迎任何有助于追踪此事的建议。

1 个答案:

答案 0 :(得分:3)

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