GPGメッセージを復号化するときのMDCエラー
-
03-10-2019 - |
質問
スケジュールされたタスクを定期的に実行し、GPGによって暗号化されたXMLファイルを介して通信するクライアントおよびサーバーシステムがあります。必要なすべてのパブリックキーは、クライアントとサーバーの間で正常に交換されています。暗号化と復号化の呼び出しは、バッチファイルから行われています。
構文を暗号化します
gpg.exe - batch-yes - recipient%1 -output%4 - passphrase%5 - local-user%2 - sign-encrypt%3
構文を復号化します
gpg.exe - batch -yes -output%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のAppend(FileHandler)メソッドを使用して、ファイルを開くことができるかどうかをテストしていました。しかし、この方法は、ファイルの最後の128バイトブロックでASCII文字26(つまりCtrl+z)が見つかったかのように独特の状態であり、ファイルの最後までその文字からすべてを削除します。これにより、暗号化されたファイルの一部が削除され、GPGを介して復号化すると上記のエラーが発生しました。 Appendメソッドをリセット(FileHandler)に置き換えた後、暗号化されたファイルが変更されなくなり、復号化が完全に機能しました。