2012-01-03 6 views
-3

動作しません。これは、テキストを暗号化し、暗号文を返すため、メソッドです:C#の暗号化方式は

public static string Encrypt(this string clearText, CryptologyMethod method) 
{ 
    ICryptoTransform cryptoTransform = null; 
    switch (method) 
    { 
     case CryptologyMethod.TripleDes: 
      cryptoTransform = new TripleDESCryptoServiceProvider().CreateEncryptor(Config.TripleDesKey, Config.TripleDesIV); 
      break; 
     case CryptologyMethod.AES: 
      cryptoTransform = new AesCryptoServiceProvider().CreateEncryptor(Config.AesKey, Config.AesIV); 
      break; 
    } 
    using (MemoryStream memoryStream = new MemoryStream()) 
    { 
     using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write)) 
     { 
      using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) 
      { 
       streamWriter.Write(clearText); 
       cryptoStream.FlushFinalBlock(); 
       return memoryStream.Text(); 
      } 
     } 
    } 
} 

public enum CryptologyMethod 
{ 
    TripleDes, 
    AES 
} 

Text()は、ストリームの内容を読み取るために、拡張メソッドです:

public static string Text(this Stream stream) 
{ 
    return new StreamReader(stream).ReadToEnd(); 
} 

また、Config.TripleDesKeyなどのプロパティは、コンフィギュレーションファイルから読み取られたバイトの配列を返します。

問題は、私はこの拡張メソッドを使用すると、結果は常に空の文字列であるということです:

文字列の暗号文=「いくつかのクリアテキスト」.Encrypt(CryptologyMethod.TripleDes)。 // cipherTextが空です

+0

どうしたらよいですか? –

+0

私はdownvoteをしませんでした - しかし:問題は何ですか?コンパイラエラー? 「間違った」暗号化? – Yahia

+8

5Kの代理人を抱えている人には、質問する方法が分かりません。エラーは何ですか、入力は何ですか、期待される出力は何ですか?あなたはそれを記入した後にストリームの位置をリセットする必要があることを認識していますか? – leppie

答えて

2

私は以前にその問題を抱えていたと思いますが、それを理解してから完全に不透明になったら解決策はかなり明白でした。

ReadToEndは、 "from current location to end"のように相対的であるという問題がありました。私がちょうどストリームの最後に書き終わったので、 "現在のポジション"はすでに "終わっていた"という問題があります。だから私はこのようなあなたの問題を解決する:

public static string Text(this Stream stream) 
{ 
    stream.Position = 0 
    return new StreamReader(stream).ReadToEnd(); 
} 

私にも同様の問題で働いて、それが助けてくれることを願っています。

+0

それは私がそれを修正した正確な方法です:http://rextester.com/FPLA30520 – Jamiec

+0

なぜダイヤモンドに '? 'マークがつくのですか?同じ鍵で解読したいときも、解読するデータの長さは無効です*。 –

+0

これはまったく別の問題のようです。ストリーム処理が今修正されたことを意味しますか? – Task