-->

文件加密和解密C#的Rijndael加密(file encryption and decryptio

2019-10-17 11:00发布

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

 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);
        }

        }
    }

任何人可以帮助?

Answer 1:

fsOut是一个只读流开放。 试试这个。

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

:我也写一个临时文件并复制了原来的完成时,但我没有为一个伟大的原因。



文章来源: file encryption and decryption c# Rijndael cipher