使用Rijndael算法加密文件

时间:2015-08-15 16:21:37

标签: c#

我在网站上找到了这段代码

private void EncryptFile(string inputFile)
        {

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

                string cryptFile = inputFile + ".enc";
                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);

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


                fsIn.Close();
                cs.Close();
                fsCrypt.Close();

        }

我有两个问题。第一个是password部分。我有一个生成随机字符串的函数:

public string CreatePassword(int length)
        {
            const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890*!=?&/";
            StringBuilder res = new StringBuilder();
            Random rnd = new Random();
            while (0 < length--){
                res.Append(valid[rnd.Next(valid.Length)]);
            }
            return res.ToString();
        }

当我编辑这样的代码时:

string password = CreatePassword(8);

有效。但是当我增加密码大小(如10)时,我收到此错误:

An unhandled exception of type 'System.Security.Cryptography.CryptographicException' occurred in mscorlib.dll

有没有办法增加密码长度?或者我们可以认为8长度是安全的吗?

其他问题:

我的输出文件是inputFile + ".enc"当我删除".enc"我得到的部分&#34;此文件由另一个进程使用&#34;错误。如何将加密的一个写入原始的?

0 个答案:

没有答案