2012-04-21 10 views
1

私はVS 2010(C#)を使用しています。 FTPサイトからアップロード(ダウンロード)されているファイルを暗号化(復号化)しようとしています。私は、ローカルの一時ファイルを使用してダウンロードしてからアップロードしてから解読するよりも早くなると思っていました。私は下のコードでエラーが発生します。私は、さまざまなストリームタイプ(つまり、FileStream、CryptoStream、およびStream)を整列させることができません。どんな助けでも大歓迎です。FTPサイトに投稿したファイルを暗号化する

public void Upload(byte[] desKey, byte[] desIV) 
    { 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create(Destination); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 

     request.Credentials = new NetworkCredential(UserName, Password); 

     FileStream fStream = File.Open(SourceFile, FileMode.OpenOrCreate); 

     CryptoStream responseStream = new CryptoStream(fStream, new DESCryptoServiceProvider().CreateDecryptor(desKey, desIV), CryptoStreamMode.Read); 

     byte[] fileContents = Encoding.UTF8.GetBytes(responseStream.ToString()); 

     responseStream.Close(); ///ERROR here 
     request.ContentLength = fileContents.Length; 

     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(fileContents, 0, fileContents.Length); 
     requestStream.Close(); 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
     response.Close(); 
    } 

単体テスト:

public void CleanEncryptUploadTest() 
    {   
     FT.ftp uploadTest = new FT.ftp(); 

     uploadTest.UserName = "ausername"; 
     uploadTest.Password = "apassword"; 
     uploadTest.SourceFile = "D:\\Temp\\Test\\file.txt"; 
     uploadTest.Destination = "ftp://ftp.mysite.com/test2.txt"; 

     byte[] key = ASCIIEncoding.ASCII.GetBytes("TestZone"); 
     byte[] initVector = ASCIIEncoding.ASCII.GetBytes("TestZone"); 

     uploadTest.Upload(key, initVector); 
    } 
+3

エラーは何ですか? – CharlesB

+0

あなたはこれをあなたにしたのは速いでしょうか? –

+0

は、大きなファイルをメモリに保存してから直接Webサイトに書き込むほうが、ソースファイルを読み込み、ローカルマシンで暗号化されたコピーを作成し、最終的に暗号化されたファイルをアップロードするよりも速いと考えていました。私は間違っている可能性がある。 –

答えて

0

これは私のために働いた、私はメモリストリームを使用し、代わりにそれに暗号化されたバイトを書きました。また、暗号ストリームモードを書き込みに変更しました。

public void Upload(byte[] key, byte[] iv) 
    { 
     byte[] fileContents; 

     using (FileStream inputeFile = new FileStream(this.SourceFile, FileMode.Open, FileAccess.Read)) 
     { 
      using (MemoryStream encryptedStream = new MemoryStream()) 
      { 
       using (CryptoStream cryptostream = new CryptoStream(encryptedStream, new DESCryptoServiceProvider().CreateEncryptor(key, iv), CryptoStreamMode.Write)) 
       { 
        byte[] bytearrayinput = new byte[inputeFile.Length]; 
        inputeFile.Read(bytearrayinput, 0, bytearrayinput.Length); 
        cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length); 
        fileContents = encryptedStream.ToArray(); 
       } 
      } 
     } 

     FtpWebRequest request = (FtpWebRequest)WebRequest.Create(this.Destination); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 
     request.Credentials = new NetworkCredential(this.UserName, this.Password); 
     request.ContentLength = fileContents.Length; 

     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(fileContents, 0, fileContents.Length); 
     requestStream.Close(); 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
     response.Close(); 
    } 
関連する問題