2016-04-04 14 views
0

Bu, windows formları projesidir. Şifrelenmiş bir dosyanın şifresini çözmede sorun yaşıyorum.Kriptografik İstisna - Hatalı Veriler

  • CryptographicException
  • Ek bilgiler:: Bozuk Veri Bana bir istisna atar. İşte http://i.imgur.com/aPggrcP.png

    kod şifre çözme için gerekli olan:

    DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
    
    OpenFileDialog ofd2 = new OpenFileDialog(); 
    
    private void button4_Click(object sender, EventArgs e) 
    { 
        if (ofd2.ShowDialog() == DialogResult.OK) 
        { 
         richTextBox4.Text = ofd2.SafeFileName; 
        } 
    } private void richTextBox4_TextChanged(object sender, EventArgs e){} 
    
    public static void CopyStream(Stream input, Stream output) 
    { 
        byte[] buffer = new byte[8 * 1024]; 
        int len; 
        while ((len = input.Read(buffer, 0, buffer.Length)) > 0) 
        { 
         output.Write(buffer, 0, len); 
        } 
    } 
    
    private void dec_Click(object sender, EventArgs e) 
    { 
        string pathK = ofd2.FileName; 
    
        if (File.Exists(pathK)) 
        { 
         string dirPath = Path.GetDirectoryName(ofd2.FileName); 
         string pathH = dirPath + "/DE" + ofd2.SafeFileName; 
    
         if (File.Exists(pathH)) 
         { 
          using (FileStream filestream = new FileStream(pathK, FileMode.Open)) 
          { 
           using (CryptoStream stream = new CryptoStream(filestream, des.CreateDecryptor(des.Key, des.IV), CryptoStreamMode.Read)) 
           { 
            using (FileStream fsDecrypted = new FileStream(pathH, FileMode.Open, FileAccess.Write)) 
            { 
             CopyStream(stream, fsDecrypted); 
            } 
           } 
          } 
         } 
         else 
         { 
          using (FileStream filestream = new FileStream(pathK, FileMode.Open)) 
          { 
           using (CryptoStream stream = new CryptoStream(filestream, des.CreateDecryptor(des.Key, des.IV), CryptoStreamMode.Read)) 
           { 
            using (FileStream fsDecrypted = new FileStream(pathH, FileMode.CreateNew, FileAccess.Write)) 
            { 
             CopyStream(stream, fsDecrypted); 
            } 
           } 
          } 
         } 
        } 
        else 
        { 
         decTextBox.Text = "Cannot find encrypted file !"; 
        }   
    } private void decTextBox_TextChanged(object sender, EventArgs e){} 
    

    Biri bana yardımcı olabilir İşte

resim bağlantısı nedir?

cevap

1

Kodunuzu okumaktan rasgele bir Anahtar ve IV oluşturan ve rastgele oluşturulmuş des.Key ve des.IV'yi CryptoStream'e iletmeye çalışan yeni bir var des = new DESCryptoServiceProvider() örneğini oluşturuyorsunuz gibi görünüyor. Sorun, kullanmakta olduğunuz kurucuya göre Anahtar ve IV'ün rastgele üretilmesidir. Baytları şifrelemek için kullanılan eşleşen Anahtarı ve IV'ü kullanmanız gerekir. rasgele oluşturulmuş Anahtar ve IV şifreleme için kullanılan bir eşleşmediğinden şifre çözme başarısız çünkü kötü veri istisna alıyoruz

des.Key = theKeyUsedToEncrypt; 
des.IV = theIVUsedToEncrypt; 

:

Yani bir noktada gibi kod olmalıdır.

+0

Teşekkür ederiz. Benim problemimi çözdün. – klemsi123