как правильно вызвать RijndaelAlg.CreateEncryptor в C # при сохранении большого количества независимых файлов - PullRequest
0 голосов
/ 18 июля 2010

В моей ситуации у меня есть несколько файлов, которые будут храниться на сервере. Каждый из этих файлов создается приложением C #, которое я пишу.

фон: Для этого приложения количество времени, необходимое для шифрования, не является важным, файлы имеют тенденцию быть маленькими, и у нас есть много свободных циклов ЦП (клиент является единственным компьютером, который шифрует или дешифрует данные).

Каждый файл не имеет отношения, и мне нужно, чтобы содержание было защищено от слежки системным администратором или любым, кто захватил жесткий диск (предположим, плохой парень)

Насколько я понимаю, RijndaelAlg является надежным алгоритмом для такого рода операций? при условии, что это правильная информация, как правильно использовать функцию RijndaelAlg.CreateEncryptor?

удобство использования, которое я хочу, - чтобы мой пользователь мог ввести пароль, предположим, что пароль является хорошим паролем.

мои вопросы

  1. как лучше всего преобразовать введенную пользователем строку (C # 'string) в байт []? Я предполагаю, что мне нужно хешировать, чтобы обойти проблему наличия нулей на каждом другом символе? Каков наилучший способ сделать это преобразование?

  2. что мне использовать для IV? Насколько я понимаю, это значение должно быть заполнено (даже несмотря на то, что MSDN говорит, что можно пропустить 'null'). что я использую для этого значения? помните, что в моей ситуации у меня есть куча независимых файлов, которые нужно расшифровать независимо.

    что, если IV хорошо известен, это проблема? (Могу ли я использовать хэш имени файла, так как это уникальное значение)

  3. Есть ли лучший алгоритм, чем RijndaelAlg, для шифрования множества независимых файлов с использованием одного и того же пароля?

1 Ответ

3 голосов
/ 18 июля 2010

Q1. Я обычно использую метод GetBytes () класса UTF8 для преобразования строк в байтовые массивы.

Encoding.UTF8.GetBytes(myString)

Q2. Каждый раз, когда вы создаете экземпляр класса RijndaelManaged, для вас случайным образом генерируется IV (доступно через свойство IV). Вы можете снова сделать это случайным образом, вызвав метод GenerateIV ().

Поскольку вам нужен этот IV для расшифровки данных, вам может быть лучше хранить этот IV где-нибудь, а не иметь уникальный IV для каждого файла. Если вы шифруете все свои файлы с помощью статического IV, обязательно устанавливайте IV при создании нового экземпляра класса RijndaelManaged каждый раз, когда вы расшифровываете файл.

Q3. RijndaelManaged / AES - это самый безопасный алгоритм, я бы не стал ничего использовать.

...