使用rijndael加密

Moh*_*mad 6 c#

我是编程方面的新手.我编写了下面的代码,以便提示用户输入密码来加密文件,但是当密码长度为8时,它才能正常工作,如果要接受任何数量的密码,我该怎么办?密码的字符?

 string pass = textBox2.Text.ToString();
            string password = @"" + pass + ""; 
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] key = UE.GetBytes(password);


            FileStream fsCrypt = new FileStream(@"c:\\users\\new", FileMode.Create);
            name = fsCrypt.Name;
            RijndaelManaged RMCrypto = new RijndaelManaged();

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

            FileStream fsIn = new FileStream(filename, FileMode.Open);

            int data;
            while ((data = fsIn.ReadByte()) != -1)
                cs.WriteByte((byte)data);
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 1

Encoding.GetBytes()仅当 GetBytes() 的结果是合法的 KeySize 时,直接从密码中派生密钥才有效。

更重要的是,它会产生一个非常弱的密钥,尤其是当您选择 Unicode 编码时。“foobar”密钥中的字节模式是66 00 6F 00 6F 00 62 00 61 00 72 00。你看到所有的 00 字节了吗?

官方的方式是使用Rfc2898DeriveBytes类。另外,使用密钥作为 IV 可能不是一个好主意,我对此并不完全确定。

另请参阅这个SO问题