2017-03-20 7 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 (또는 유니 코드)를 사용하지 마십시오 끔찍한, 깨진 알고리즘
  • 입니다 ASCII (또는 유니 코드) 데이터로 표시 될 수 있습니다.
  • 설명 할 수없는 한 공개 된 소프트웨어에 암호를 추가하지 마십시오.
      0 그것은 오래된 것으로 간주됩니다 어떤 조건에서
    • 을 무엇
    • 이 날짜
      • 을 밖으로의 그리고 모든 사용자를 중단하거나하지 않습니다 어떻게하면 당신은 그것을 성장 것인가 그렇게 할 때 불안정합니다.