2011-01-13 3 views
3

Я читал некоторые из этой темы, но я по-прежнему не на 100% удобен с ответами, которые я вижу.Можно ли использовать Rijndael.Create() вместо нового RijndaelManaged()

При создании криптографического алгоритма с помощью Rijndael.Create(), вы получаете объект типа RijndaelManaged - там, кажется, не быть разница между этим и вызовом new RijndaelManaged() (или New RijndaelManaged() для вас VB людей). :)

Из того, что я прочитал, существует метод Rijndael.Create(), так что вам не нужно беспокоиться о конкретной реализации, если оно изменяется в будущей версии. Но мой вопрос: предположим, что это действительно так, и .NET 5.0 возвращает другую реализацию. Есть ли гарантия того, что элементы, зашифрованные с помощью RijndaelManaged, могут быть дешифрованы без проблем, используя SomeFutureRijndaelManaged?

Я не могу представить, что они были бы несовместимы, но я просто хочу это подтвердить.

Благодаря

+0

Что касается примечания VB: VB не чувствителен к регистру, поэтому вызов конструктора C# будет работать так же, как и в VB. Это только IDE, которая настаивает на капитализации всего. –

+1

Да, я знаю ... Просто плохая шутка. –

ответ

7

Rijndael.Create добавляет слой абстракции и дополнительные переадресовывает так, что, мол, он может обеспечить системную специфическую версию алгоритма. На практике это очень медленно, требуя отключения через Crypto API для разрешения сопоставлений строк OID, чтобы в конечном итоге прийти к классу RijndaelManaged. Мы обнаружили, что вместо обеспечения стабильности на разных платформах вместо этого возникают проблемы в Windows 2000/XP/Vista/Windows. Кроме того, в несколько сотен раз медленнее создавать экземпляр объекта с помощью методов Create, а не просто создавать экземпляр класса RijndaelManaged напрямую. Мы обнаружили, что это большая шейка бутылки при шифровании/расшифровке данных в памяти.

Что касается «будущей проверки» - таких алгоритмов безопасности нет. Когда выйдет .NET 5.0. Вам нужно будет обновить, чтобы разместить любые изменения, которые они делают независимо от метода, который вы создаете алгоритм. Вы можете использовать <supportedRuntime /> в файле .config вашего приложения для блокировки в .NET-версии, чтобы вы разрешали вашему приложению переключаться только после того, как вы протестировали и обновили.

+0

Спасибо. Я думаю, что я буду придерживаться RijndaelManaged напрямую, и я посмотрю, в какой поддерживаемой настройке Runtime. –