1

我可以使用以下代码加密位于我桌面上的文本文件。

 private void btnEncrypt_Click(object sender, EventArgs e)
    {
        //EncryptFile(); 
        try
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "All Files (*.*)|";
            dialog.InitialDirectory = @"Desktop";
            dialog.Title = "Please select a file to encrypt.";

            dialog.ShowDialog();

            inputFile = dialog.FileName;

            outputFile = inputFile;

            string password = @"myKey123"; // Your Key Here
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] key = UE.GetBytes(password);

            string cryptFile = outputFile;
            FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);

            RijndaelManaged RMCrypto = new RijndaelManaged();

            CryptoStream cs = new CryptoStream(fsCrypt,
                RMCrypto.CreateEncryptor(key, key),
                CryptoStreamMode.Write);

            FileStream fsIn = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            int data;
            while ((data = fsIn.ReadByte()) != -1)
                cs.WriteByte((byte)data);


            fsIn.Close();
            cs.Close();
            fsCrypt.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

这很好用,但是当我尝试解密相同的文本文件时,什么也没有发生,不会抛出错误消息让我知道发生了什么,我使用以下代码进行解密

private void btnDecrypt_Click(object sender, EventArgs e)
    {
        try
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "All Files (*.*)|";
            dialog.InitialDirectory = @"Desktop";
            dialog.Title = "Please select a file to decrypt.";

            dialog.ShowDialog();

            inputFile = dialog.FileName; // "C:\\Users\\daniel\\Desktop\\text.txt";
            outputFile = inputFile;


                string password = @"myKey123"; // Your Key Here

                UnicodeEncoding UE = new UnicodeEncoding();
                byte[] key = UE.GetBytes(password);

                FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);

                RijndaelManaged RMCrypto = new RijndaelManaged();

                CryptoStream cs = new CryptoStream(fsCrypt,
                    RMCrypto.CreateDecryptor(key, key),
                    CryptoStreamMode.Read);

                FileStream fsOut = new FileStream(outputFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

                int data;
                while ((data = cs.ReadByte()) != -1)
                    fsOut.WriteByte((byte)data);

                fsOut.Close();
                cs.Close();
                fsCrypt.Close();

            }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        }
    }

有人可以帮忙吗?

4

1 回答 1

0

fsOut作为只读流打开。试试这个。

 FileStream fsOut = new FileStream(
       outputFile, 
       FileMode.Open, 
       FileAccess.Write, 
       FileShare.ReadWrite);

注意:我也会写入临时文件并在完成后复制原始文件,但我没有充分的理由

于 2012-11-30T17:09:25.753 回答