保存大量独立文件时如何在C#中正确调用rijndaelag.CreateEncryptor

保存大量独立文件时如何在C#中正确调用rijndaelag.CreateEncryptor,c#,encryption,rijndaelmanaged,rijndael,C#,Encryption,Rijndaelmanaged,Rijndael,在我的情况下,我有许多文件将存储在服务器上。每个文件都是由我正在编写的C#应用程序创建的 背景: 对于这个应用程序,加密所需的时间并不重要,文件往往很小,我们有大量的CPU周期可供使用(客户端是唯一加密或解密数据的计算机) 每个文件都是不相关的,我需要保护内容不被系统管理员或任何持有硬盘的人窥探(假设是坏人) 我的理解是Rijndaelag是这种操作的可靠算法?假设此信息正确,如何正确使用Rijndaelag.CreateEncryptor函数 我想要的可用性是让我的用户输入一个密码,假设这个密

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

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

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

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

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

我的问题是

  • 如何最好地将用户输入的字符串(C#'字符串)转换为字节[]?我假设我应该散列以避开每一个字符上都有0的问题?进行此转换的最佳方法是什么

  • 静脉注射用什么?据我所知,这是一个应该填充的值(尽管MSDN表示可以传递“null”)。该值使用什么?记住我的情况,我有一堆独立的文件需要独立解密

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

  • 对于使用相同密码加密多个独立文件,是否有比Rijndaelag更好的算法


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

    Encoding.UTF8.GetBytes(myString)
    
    问题2。每次创建RijndaelManaged类的实例时,都会为您随机生成一个IV(可以使用IV属性访问)。您可以通过调用GenerateIV()方法再次将其随机化

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


    第三季度。RijndaelManaged/AES是最安全的算法,我不会使用任何els。

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

    Encoding.UTF8.GetBytes(myString)
    
    问题2。每次创建RijndaelManaged类的实例时,都会为您随机生成一个IV(可以使用IV属性访问)。您可以通过调用GenerateIV()方法再次将其随机化

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


    第三季度。RijndaelManaged/AES是最安全的算法,我不会使用任何els。

    不要尝试对字符串进行编码,使用PasswordDeriveBytes或Rfc2898DeriveBytes。嗯,很好的一点,因为我忘记了它是用于加密密码的。
    PasswordDeriveBytes
    现在已经过时了。使用不要尝试对字符串进行编码,使用PasswordDeriveBytes或Rfc2898DeriveBytes。嗯,这很好,因为我忘了它是用来加密密码的。
    PasswordDeriveBytes
    现在已经过时了。使用