【发布时间】:2015-04-10 13:00:16
【问题描述】:
我正在开发一个使用 C# 中的 RijndaelManaged 方法加密 USB 驱动器的程序,可以在 128/192/256 位密钥大小之间进行选择。 我假设使用 256 位密钥加密应该花费更多时间,但是即使有很多文件,该过程也需要与使用 128 位密钥完全相同的时间。你认为这是一个编程错误吗?
我使用此功能从密码生成我的密钥和 iv:
private List<byte[]> GenerateKeys(string password, int strength)
{
byte[] key;
byte[] iv;
List<byte[]> result = new List<byte[]>();
Rfc2898DeriveBytes rfcDb = new Rfc2898DeriveBytes(password, System.Text.Encoding.UTF8.GetBytes(password));
key = rfcDb.GetBytes(strength); // strength value can be 16, 24 or 32 depending
iv = rfcDb.GetBytes(strength); // on the user choice
result.Add(key);
result.Add(iv);
return result;
}
然后我以这种方式使用我的 RijndaelManaged 方法:
RijndaelManaged rijndael = new RijndaelManaged();
rijndael.Mode = CipherMode.CBC;
rijndael.BlockSize = Strenght * 8;
rijndael.KeySize = Strenght * 8;
ICryptoTransform aesEncryptor = rijndael.CreateEncryptor(key, iv); // key and iv from the other method
你看出什么不对了吗?
【问题讨论】:
-
如果是读取文件,时间很可能以磁盘I/O为主,所以编码时间的差异可能会变得微不足道。
-
@MatthewWatson :我也是这么想的,所以我尝试在我的硬盘驱动器上而不是 USB 驱动器上(读/写速度有限),结果是一样的。我会进一步调查。 Artjom B. : 谢谢你的精确。
标签: c# cryptography key aes rijndaelmanaged