2

この投稿は、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 バイナリ ファイルを開いたり読み取ったりする際に問題が発生したことはありません。

ありがとうございました!アイザック

4

1 に答える 1

-1

バイナリ ファイルがテキスト モードで送信されたようで、行末やその他の非 ASCII 文字が変換された可能性があります。そして、破損はおそらく元に戻せません。

于 2012-11-28T14:51:42.880 に答える