質問

スケジュールされたタスクを定期的に実行し、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)に置き換えた後、暗号化されたファイルが変更されなくなり、復号化が完全に機能しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top