0

在我的情况下,我有许多文件将存储在服务器上。这些文件中的每一个都是由我正在编写的 C# 应用程序创建的。

背景: 对于这个应用程序,加密所需的时间并不重要,文件往往很小,而且我们有大量的 CPU 周期可用(客户端是唯一加密或解密数据的计算机)。

每个文件都不相关,我需要保护内容不被系统管理员或任何持有硬盘的人窥探(假设是坏人)

我的理解是 RijndaelAlg 是这种操作的可靠算法?假设这是正确的信息如何正确使用 RijndaelAlg.CreateEncryptor 函数?

我想要的可用性是让我的用户输入密码,假设密码是一个好的密码。

我的问题是

  1. 如何最好地将用户输入的字符串(C#'字符串)转换为字节 []?我假设我应该散列来解决每个其他字符都有 0 的问题?进行这种转换的最佳方法是什么?

  2. 我用什么做静脉输液?我的理解是这是一个应该填充的值(即使 MSDN 说可以传递“null”)。这个值我用什么?请记住我的情况,我有一堆需要独立解密的独立文件。

    如果 IV 是众所周知的,这是一个问题吗?(我可以使用文件名的哈希,因为它是唯一值)

  3. 有没有比 RijndaelAlg 更好的算法来使用相同的密码加密许多独立文件?

4

1 回答 1

3

Q1。我通常使用 UTF8 类的 GetBytes() 方法将字符串转换为字节数组。

Encoding.UTF8.GetBytes(myString)

Q2。每次创建 RijndaelManaged 类的实例时,都会为您随机生成一个 IV(可使用 IV 属性访问)。您可以通过调用 GenerateIV() 方法再次随机化它。

由于您需要此 IV 来解密数据,因此最好将此 IV 存储在某个地方,而不是每个文件都有一个唯一的 IV。如果您使用静态 IV 加密所有文件,请确保在每次解密文件时创建 RijndaelManaged 类的新实例时设置 IV。

Q3。RijndaelManaged/AES 是目前最安全的算法,我不会使用任何其他算法。

于 2010-07-17T23:46:21.550 回答