2010-09-15 74 views
2

我有一個客戶端和服務器系統,它定期運行計劃任務並通過gpg加密的xml文件進行通信。所有必需的公鑰已在客戶端和服務器之間成功交換。加密和解密調用正在從批處理文件完成。解密GPG消息時發生mdc錯誤

加密語法

gpg.exe --batch --yes --recipient%1 --output%4 --passphrase%5 --local用戶%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:待定字節!

要注意的一點是,這不是所有的文件,但只有一些文件發生。我一直無法找到它失敗的文件之間的任何共同點。

有人對這個錯誤的含義是否熟悉?任何建議,以幫助追蹤這一點是值得歡迎的。

回答

3

終於搞明白了。 gpg並不是這裏的罪魁禍首。當服務器檢查指定文件夾中的文件時,它使用Delphi上的Append(fileHandler)方法來測試文件是否可以打開。但是這種方法有一個特殊的條件,就好像它在文件的最後128字節塊中找到了ascii字符26(即CTRL + z),它將刪除從該字符到文件結尾的所有內容。這導致加密文件的一部分被刪除,隨後在通過gpg解密時導致上述錯誤。在用Reset(fileHandler)替換Append方法後,加密文件不再被修改,解密完美。