2016-11-21 2 views
0

ребята, я новичок в этом сайте, и я действительно новичок в программировании, любая помощь будет потрясающей! Спасибо. Ниже приведен мой код для шифрования и дешифрования. Изображения и файлы PDF получают зашифрованные и дешифрованные без проблем, но текстовые файлы я не знаю, что он не показывает ничего в файле после дешифрования.Когда я дешифрую текстовый файл, текстовый файл становится пустым

private void encrypt (string input, string output, string strHash) 

{ 
    FileStream inStream, outStream; 
    CryptoStream CryStream; 

    TripleDESCryptoServiceProvider TDC = new TripleDESCryptoServiceProvider(); 
    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 

    byte[] byteHash, byteTexto; 

    inStream = new FileStream(input, FileMode.Open, FileAccess.Read); 
    outStream = new FileStream(output, FileMode.OpenOrCreate, FileAccess.Write); 

    byteHash = md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(strHash)); 
    byteTexto = File.ReadAllBytes(input); 

    md5.Clear();enter code here 

    TDC.Key = byteHash; 
    TDC.Mode = CipherMode.ECB; 

    CryStream = new CryptoStream(outStream, TDC.CreateEncryptor(), CryptoStreamMode.Write); 

    int bytesRead; 
    long length, position = 0; 
    length = inStream.Length; 

    while(position < length) 
    { 
     bytesRead = inStream.Read(byteTexto, 0, byteTexto.Length); 
     position += bytesRead; 

     CryStream.Write(byteTexto, 0, bytesRead); 

    } 

    inStream.Close(); 
    outStream.Close(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 

} 

private void btnDecrypt_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog open = new OpenFileDialog(); 
    open.ShowDialog(); 

    txtLocalDecFile.Text = open.FileName; 

    SaveFileDialog save = new SaveFileDialog(); 
    save.ShowDialog(); 

    txtNewDecFile.Text = save.FileName; 

    decrypt(txtLocalDecFile.Text, txtNewDecFile.Text, key); 

} 

private void decrypt(string input, string output, string strHash) 
{ 
    FileStream inStream, outStream; 
    CryptoStream CryStream; 
    TripleDESCryptoServiceProvider TDC = new TripleDESCryptoServiceProvider(); 
    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 

    byte[] byteHash, byteTexto; 

    inStream = new FileStream(input, FileMode.Open, FileAccess.Read); 
    outStream = new FileStream(output, FileMode.OpenOrCreate, FileAccess.Write); 

    byteHash = md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(strHash)); 
    byteTexto = File.ReadAllBytes(input); 

    md5.Clear(); 

    TDC.Key = byteHash; 
    TDC.Mode = CipherMode.ECB; 

    CryStream = new CryptoStream(outStream, TDC.CreateDecryptor(), CryptoStreamMode.Write); 

    int bytesRead; 
    long length, position = 0; 
    length = inStream.Length; 

    while (position < length) 
    { 
     bytesRead = inStream.Read(byteTexto, 0, byteTexto.Length); 
     position += bytesRead; 

     CryStream.Write(byteTexto, 0, bytesRead); 

    } 

    inStream.Close(); 
    outStream.Close(); 
} 
+0

Помимо: Что с неиспользованной 'strHash' /' byteHash'? – Cameron

ответ

2

Вы забыли закрыть свой CryptoStream, что означает, что он не может очистить все данные до файла.

Либо закройте поток, как вы, используя inStream и outStream, или вызовите FlushFinalBlock() на CryStream.

В документации имеется example.

+0

Необработанное исключение типа «System.ObjectDisposedException» произошло в mscorlib.dll, когда я вставил CryStream.close(); – Tantrix1

+0

У меня в буквальном смысле даже нет обработки ошибок слишком плохо, потому что им нужно научиться делать это. – Tantrix1

Смежные вопросы