2017-03-20 5 views
0
static byte[] desdecrypt(Mode mode, byte[] IV, byte[] key, byte[] msg) 
    { 
     using (var des = new DESCryptoServiceProvider()) 
     { 
      des.IV = IV; 
      des.Key = key; 
      des.Mode = CipherMode.CBC; 
      des.Padding = PaddingMode.PKCS7; 

      using (var mstream = new MemoryStream()) 
      { 
       CryptoStream cs = null; 
       if (mode == Mode.DECRYPT) 
       { 
        cs = new CryptoStream(mstream, des.CreateDecryptor(), CryptoStreamMode.Read); 
       } 
       if (cs == null) 
        return null; 

       cs.Read(msg, 0, msg.Length); 
       return mstream.ToArray(); 
      } 
     } 
     return null; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     string a = textBox4.Text; 
     string ab = textBox6.Text; 
     byte[] IV = Encoding.ASCII.GetBytes(ab); 
     string aa = textBox7.Text; 
     byte[] key = Encoding.ASCII.GetBytes(aa); 
     byte[] decrypted = desdecrypt(Mode.DECRYPT, IV, key, Encoding.ASCII.GetBytes(a)); 
     textBox5.Text = Encoding.ASCII.GetString(decrypted); 
    } 

cs.Read(MSG、0、msg.Length)エラーがこの行に(不正なデータ)の発生を読み込みますほぼすべてを試しましたデス復号化は 未処理の例外が私のアプリケーションで私が持っているものすべてのヘルプしてください知らない を発生しているC#

答えて

1

基本ストリームにデータがあり、それを配列に復号化する場合は、CryptoStreamMode.ReadReadを使用してください。

データを収集する空のストリームがあるため、CryptoStreamMode.WriteWriteを使用してください。


標準の注意事項が適用されます。

  • DESは暗号化されたデータができることを前提としないキー
  • としてASCII(またはUnicode)のデータを使用しないでくださいひどい、壊れたアルゴリズム
  • ですASCII(またはUnicode)データとして表される
  • 解説がない限り、公開されたソフトウェアに暗号を追加しないでください。
      0それは、日付それが古くなって
      • だとき、あなたがそれを成長する方法と、それはすべてのユーザーを破る、またはすることはありませんどのよう
      • の外にあるとみなされますどのような条件の下で
      • あなたがそうするとき、彼らは安全ではありません。
関連する問題