2

スケジュールされたタスクを定期的に実行し、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 --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:保留中のバイト!

注意すべき点は、これはすべてのファイルで発生しているのではなく、一部のファイルでのみ発生しているということです。失敗したファイル間の共通点を見つけることができませんでした。

このエラーの意味を知っている人はいますか?これを追跡するのに役立つ提案は大歓迎です。

4

1 に答える 1

3

最後にそれを理解しました。gpg はここでは犯人ではありませんでした。サーバーが指定されたフォルダ内のファイルをチェックしているときに、Delphi で Append(fileHandler) メソッドを使用して、ファイルを開くことができるかどうかをテストしていました。しかし、このメソッドには、ファイルの最後の 128 バイト ブロックで ASCII 文字 26 (つまり CTRL+z) が見つかったかのように、その文字からファイルの最後まですべてが削除されるという特殊な条件がありました。これにより、暗号化されたファイルの一部が削除され、その後、gpg で復号化するときに上記のエラーが発生しました。Append メソッドを Reset(fileHandler) に置き換えた後、暗号化されたファイルは変更されなくなり、復号化は完全に機能します。

于 2010-09-20T19:28:36.920 に答える