我有一个客户端和服务器系统,可以定期运行计划任务,并通过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:待定字节!
需要注意的是,所有文件都没有这种情况,但只有一些文件。我无法在失败的文件之间找到任何共性。
是否有人熟悉此错误的含义?我们欢迎任何有助于追踪此事的建议。
答案 0 :(得分:3)
终于明白了。 gpg不是这里的罪魁祸首。当服务器检查指定文件夹中的文件时,它使用Delphi上的Append(fileHandler)方法来测试文件是否可以打开。但是这种方法有一个特殊的条件,好像它在文件的最后128个字节块中找到了ascii字符26(即CTRL + z),它会删除该字符到文件末尾的所有内容。这导致部分加密文件被删除,并在通过gpg解密时导致上述错误。在使用Reset(fileHandler)替换Append方法后,不再修改加密文件,并且解密工作完美。