Шифрование AES с помощью BouncyCastle: AESEngine, AESFastEngine ИЛИ AESLightEngine? - PullRequest
5 голосов
/ 02 сентября 2011

Я хочу перенести этот простой пример JAVA ...

Шифрование / дешифрование AES с примером Bouncycastle в J2ME

... на C # и получить дваследующие 3 вопроса:

  1. Как я понимаю, пример JAVA использует AESEngine для операций шифрования / дешифрования.В чем разница между AESEngine и AESFastEngine и AESLightEngine?К сожалению, я не понимаю информацию, приведенную в документации: http://www.bouncycastle.org/docs/docs1.6/index.html

  2. Я хочу использовать новый ключ шифрования для каждого файла, который я шифрую.Какие режимы работы блочного шифра следует использовать: AES.CBC, AES.CFB, AES.ECB ИЛИ AES.OFB http://www.bouncycastle.org/docs/docs1.6/index.html

  3. Верно ли мое предположение, что в моем случае у меня нетиспользовать iv / salt (что означает, что я должен использовать статический iv ?), поскольку я использую AES.KeyGen128 () для генерации ключей и использую его только один раз?
    http://www.bouncycastle.org/docs/docs1.6/index.html

Надеюсь, мои вопросы не вызовут слишком много путаницы ;-) Я ценю каждый ответ, разъяснение или обратную связь, которую вы можете дать мне.

Майк

1 Ответ

5 голосов
/ 02 сентября 2011
  1. Мое чтение документа говорит о том, что AESEngine, FastEngine и LightEngine имеют различный компромисс памяти и скорости. Вам нужно было бы проверить его самостоятельно, чтобы определить, актуальны ли эти компромиссы в вашем сценарии.

  2. вам нужно прочитать о различных режимах AES. Различные режимы имеют разные сильные стороны и атрибуты, которые могут быть более или менее применимы или желательны в зависимости от вашего сценария. Таким образом, ответ на ваш вопрос «это зависит».

  3. нет. вам понадобится IV. Что касается соли, она обычно используется с парольной фразой для генерации фактического ключа шифрования и IV, часто через PKBDF2. Это выходит за рамки AES, но это типичное использование.


Наконец, вы не спросили, но .... почему вы переносите этот код на C #? .NET имеет встроенное шифрование AES. Вам не нужно ничего переносить, вы можете просто использовать библиотеку базовых классов .NET. Просто убедитесь, что вы используете одинаковый размер ключа и режим, и убедитесь, что ваш ключ + iv одинаков для каждой стороны, и классы .NET BCL AES будут взаимодействовать с компонентом BouncyCastle для J2ME.

...