2016-11-21 3 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の場合と同じようにストリームを閉じるか、CryStreamでFlushFinalBlock()を呼び出します。

ドキュメントにはexampleがあります。

+0

CryStream.close();を挿入したときにmscorlib.dllで 'System.ObjectDisposedException'型の未処理の例外が発生しました。 – Tantrix1

+0

私は文字通り、エラー処理もしていません。イム・ソーは悪いです。私はそれをどうやって行うのかを学ばなくてはなりません。 – Tantrix1

関連する問題