この投稿は、C# を使用して FTP サーバーにファイルを転送するときに PGP バイナリ ファイルの破損を防止することに関する以前の投稿 (http://stackoverflow.com/questions/7353993/ftp-ching-pgp-file-during-transfer) に似ています。 -in-c-sharp)、別の質問をしていますが。
概要:
すべての PGP 暗号化ファイルをテキスト保護することで、PGP ファイルの破損の原因を修正しました。ただし、この修正を実装する前に、暗号化されて FTP サーバーにアップロードされた PGP バイナリ ファイルが多数あります。ファイルを FTP サーバーにアップロードするために使用されるコードと、FTP サーバーを管理するために使用されるソフトウェアを知っていれば、破損した PGP バイナリ ファイルを修復して、復号化および回復できるでしょうか?
詳細: 1) VB .NET コード (以下に含まれる) を使用して IIS 6.0 Web サーバーから CoreFTP サーバーにアップロードされた、テキスト保護されていない Gpg4Win を使用して暗号化された PGP 暗号化ファイル (バイナリ ファイル) があります。
2) これらのファイルの暗号化されていないコピーはありません。これらは、CoreFTP サーバーにアップロードされる前に、Web サーバーのメモリ内で暗号化されました。したがって、バイナリ PGP ファイルを復号化する必要があります。そうしないと、ファイル内のデータが失われます。
3) PGP ファイルのバイナリが破損しているため、正しい PGP 秘密鍵を持っていても、Gpg4Win でファイルを復号化できません。Gpg4Win は、暗号化されたバイナリ ファイル内の PGP データを見つけたり読み取ったりすることができません。
4) CoreFTP サーバーにアップロードする前に、テキストで保護された最新の PGP 暗号化ファイル (バイナリ データは base64 表記で保存されています) を正常に復号化できます。したがって、復号化の問題は、Gpg4Win または PGP 秘密鍵と公開鍵のペアの問題ではなく、ファイルの破損が原因である可能性が最も高くなります。
5) 私が PGP バイナリ ファイルで使用しようとしたいくつかのバイナリ ファイル回復プログラムは、ファイル データが見つからず、バイナリ ファイルの破損を修正できないと言っています。または、PGP バイナリ ファイルに含まれるバイナリ データを変更しません。
PGP バイナリ ファイルのアップロードに使用される VB .net コード:
Public Function UploadFile(ByVal localFileName As String, ByVal FTPFilename As String, ByVal UseBinary As Boolean, ByVal uniqueName As Boolean, ByRef StatusDescription As String) As FtpStatusCode
Dim request As FtpWebRequest = CType(FtpWebRequest.Create(FTPFilename), FtpWebRequest)
request.Credentials = New NetworkCredential(Username, Password)
If uniqueName Then
request.Method = WebRequestMethods.Ftp.UploadFileWithUniqueName
Else
request.Method = WebRequestMethods.Ftp.UploadFile
End If
request.UseBinary = UseBinary
Dim ff As New FileInfo(localFileName)
Dim fileContents(Convert.ToInt32(ff.Length)) As Byte
Using fr As FileStream = ff.OpenRead
fr.Read(fileContents, 0, fileContents.Length)
End Using
Using writer As Stream = request.GetRequestStream
writer.Write(fileContents, 0, fileContents.Length)
End Using
Dim response As FtpWebResponse = CType(request.GetResponse, FtpWebResponse)
StatusDescription = response.StatusDescription
Return response.StatusCode
End Function
私の FTP サーバーには、最新バージョンの CoreFTP for Windows を使用しています。
FTP LIST コマンドに応答すると、CoreFTP はファイル情報を (MS-DOS 形式ではなく) Unix 形式で返すため、MS を使用する Windows サーバーからバイナリ ファイルを転送した結果、バイナリの破損が発生したのではないかと考えています。 Unix フォーマットを使用する FTP サーバーへのバイナリ ファイルの -DOS フォーマット。ただし、Web サーバーから CoreFTP サーバーにアップロードされた非 PGP バイナリ ファイルを開いたり読み取ったりする際に問題が発生したことはありません。
ありがとうございました!アイザック