4

PGP 暗号化ファイルを asc 形式で sFTP 経由で FTP フォルダーに送信する必要があります。ストリーム (CSV 形式のストリーム) を PGP で暗号化し、ローカル マシンに保存せずに sFTP にプッシュする方法はありますか。

以下は、ファイル名をパラメーターとして受け取るPGP暗号化に使用する関数です。

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 暗号化ファイルを作成する必要があります

何か案は?

アップデート:

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 です。

4

1 に答える 1

0

コマンド ラインのオプションとしてファイル名を使用する代わりに、出力をコンソールに直接公開する which を-渡すことができます。--outputこのデータを直接ストリーミングできます。

プロパティArgumentsは次のようになります。

psi.Arguments = String.Format(" --armor --yes --recipient ""{0}"" --output - --encrypt ""{1}""", _
                                      pgpRecipient, FileName)

プロセスを実行すると、ProcessPGP.StandardOutput必要なストリームが得られるはずです。

于 2013-03-01T15:27:35.457 に答える