这篇文章与之前关于使用 C# 将这些文件传输到 FTP 服务器时防止 PGP 二进制文件损坏的文章类似 (http://stackoverflow.com/questions/7353993/ftp-sharing-pgp-file-during-transfer -in-c-sharp),虽然我问的是不同的问题。
概括:
我已通过对所有 PGP 加密文件进行文本保护来修复 PGP 文件损坏的根源;但是,我有一堆 PGP 二进制文件,这些文件在实施此修复之前已加密并上传到我的 FTP 服务器。了解了用于将文件上传到 FTP 服务器的代码和用于管理 FTP 服务器的软件,是否可以修复损坏的 PGP 二进制文件以便可以解密和恢复它们?
详细信息:1)我有使用 Gpg4Win 加密的 PGP 加密文件,这些文件不是文本铠装(它们是二进制文件),这些文件是使用 VB .NET 代码(包括在下面)从 IIS 6.0 Web 服务器上传到 CoreFTP 服务器的。
2) 我没有这些文件的未加密副本。在上传到 CoreFTP 服务器之前,它们在网络服务器的内存中被加密。因此,我需要解密二进制 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 服务器,我使用的是适用于 Windows 的最新版本的 CoreFTP。
响应 FTP LIST 命令时,CoreFTP 以 Unix 格式(而不是 MS-DOS 格式)返回文件信息,所以我想知道二进制损坏是否是从使用 MS 的 Windows 服务器传输二进制文件的结果-DOS 格式化二进制文件到使用 Unix 格式的 FTP 服务器。但是,我在打开/读取从我的网络服务器上传到 CoreFTP 服务器的非 PGP 二进制文件时没有遇到任何问题。
谢谢!艾萨克