任何方式来PGP加密数据流,并将其直接保存到FTP,而不必保存在本地?
我必须通过sFTP以asc格式将PGP加密文件发送到FTP文件夹。有没有办法让PGP加密一个流(它是CSV格式的流)并将它推送到sFTP ,而不必将它保存在本地机器上。任何方式来PGP加密数据流,并将其直接保存到FTP,而不必保存在本地?
下面是我用PGP加密函数,它接受文件名作为PARAM:
Private Function PGPEncrypt(ByVal FileName As String) As Boolean
Dim errorHappened As Boolean = False
Dim encodedFileName As String = String.Format("{0}{1}", FileName, ".asc")
Dim pgpRecipient As String = System.Configuration.ConfigurationManager.AppSettings.Get("PgpRecipient")
Dim psi As System.Diagnostics.ProcessStartInfo
Dim ErrorResult As String = ""
Dim Result As String = ""
Try
psi = New ProcessStartInfo(System.Configuration.ConfigurationManager.AppSettings.Get("PgpPath"))
psi.CreateNoWindow = True
psi.UseShellExecute = False
psi.Arguments = String.Format(" --armor --yes --recipient ""{0}"" --output ""{1}"" --encrypt ""{2}""", _
pgpRecipient, encodedFileName, FileName)
psi.RedirectStandardInput = True
psi.RedirectStandardOutput = True
psi.RedirectStandardError = True
ProcessPGP = System.Diagnostics.Process.Start(psi)
ProcessPGP.StandardInput.Write(m_Passphrase)
Result = ProcessPGP.StandardError.ReadToEnd()
ProcessPGP.WaitForExit()
Catch ex As Exception
errorHappened = True
Dim ReadError As New StringBuilder()
ReadError.Append(vbCrLf & "Error Detail:")
ReadError.Append(vbCrLf & ex.ToString())
OurEventLog.WriteEntry(ReadError.ToString(), EventLogEntryType.Error)
End Try
Return errorHappened
End Function
再次,主要要求是不保存到本地PGP加密的文件,然后发送到FTP但PGP加密文件必须通过流创建。
任何想法?
UPDATE:
FTP代码:
ftp.ConnectMode = FTPConnectMode.PASV
ftp.RemoteHost = Csla.ConfigurationManager.AppSettings("FTPRemoteHost")
If _blnDiagnostics Then DiagnosticsManager.Publish("STREAM_TO_FTP: CONNECT TO FTP", DiagnosticsManager.EntryType.SuccessAudit)
ftp.Connect()
ftp.Login(strUser, strPassword)
ftp.TransferType = FTPTransferType.BINARY 'ASCII
ftp.Put(OUTBOUNDMESSAGE, pFilename)
ftp.Quit()
ftp = Nothing
OUTBOUNDMESSAGE是System.IO.Stream。
您可以将-
传递给--output
,而不是将文件名作为命令行的选项,而直接将输出显示给控制台。您可以直接传输这些数据。然后
你Arguments
属性应该是这样的:
psi.Arguments = String.Format(" --armor --yes --recipient ""{0}"" --output - --encrypt ""{1}""", _
pgpRecipient, FileName)
在执行的过程中,ProcessPGP.StandardOutput
应该得到你所需要的数据流。
FTP组件怎么样?只需将此加密数据流发送到FTP并将其另存为asc? – Learner 2013-03-01 15:49:49
由于您没有包含任何如何通过FTP发送数据的代码,所以我无法确定您会做什么。如果您必须通过FTP流式传输现有文件,则只需使用输出流即可。如果它是一个将文件作为参数的库,并且流本身就可以工作,那么您需要找到一个支持采用某种形式的“Stream”的FTP库。 – doctorless 2013-03-01 15:51:44
为FTP添加了代码。我使用ftp.Put,它将流作为参数。那么,基本上你的意思是PGP将流加密并将其保存为ftp上的asc? – Learner 2013-03-01 15:58:39
这看起来不像C#给我...? – 2013-03-01 17:07:41