Что означает имя класса, заканчивающееся "Managed" (С#.NET)?

Я относительно новичок в С#, поэтому, пожалуйста, несите меня. Я понимаю основную разницу между управляемым и неуправляемым кодом. Но я все еще немного смущен, когда нужно использовать некоторые методы.

Например, что означает слово "Управляемый" в некоторых концах имен классов. Означает ли это, что они управляются, а все остальные нет? Например, в чем разница между Aes и AesManaged или SHA512 и SHA512Managed? Я знаю, что вы не можете получить из управляемых классов, но это все, что я знаю.

Также, когда нужно использовать класс "Управляемый", например, когда выбрать Aes над AesManaged?

(Я уже читал об основах управляемого кода в wikipedia (здесь), а также нашел приятное объяснение об основах управляемый код (здесь)

Спасибо за ваше время и ответы.

Ответ 1

В .NET есть два типа оболочек криптографии, классы, чье имя заканчивается в Managed, и те, чье имя заканчивается в CryptoServiceProvider. Только версии CryptoServiceProvider сертифицированы FIPS 140-1. Они представляют собой обертки вокруг собственного кода, которые Microsoft представила в министерство торговли США, подтверждая, что алгоритмы отвечают требованиям безопасности, изложенным в этом документе. Они также требуют, чтобы операционная система установила эти собственные библиотеки. Согласование FIPS - это большое дело, когда вы заключаете контракт с государственным агентством США или любым юридическим лицом, которое утверждает, что ваш код должен быть сертифицирован FIPS.

Управляемые версии алгоритмов записываются в управляемом коде и не имеют зависимости от собственных библиотек API криптокода. Они не сертифицированы FIPS. Существует параметр реестра, который может использовать ваш клиент, который обеспечивает соответствие FIPS. Управляемые классы генерируют исключение в своем конструкторе при его включении. Подробнее об этом в сообщении .

Ответ 2

Посмотрите раздел Remarks:

Это абстрактный класс. Единственная реализация этого класса - SHA512Managed.

Значение, SHA512 (и любая другая комбинация Method и MethodManaged) - это просто базовый класс, описывающий контракт, который любой разработчик должен иметь fullfil, он сам по себе не имеет функциональности.

В случае SHA512Managed существует только одна реализация - управляемая. Другие могут использовать реализацию в C или C++.

Ответ 3

В случае этих классов SHA512 как a factory для создания реализаций SHA512, так и базового класса для реализаций и SHA512Managed является одной из таких реализаций, написанных в управляемом коде (думаю, С#). Я взглянул, и библиотеки, похоже, приходят с другими реализациями, в том числе как минимум один, который использует собственные API Windows.

Ответ 4

Существует две версии многих крипто-классов; один обеспечивает управляемую реализацию (полностью написанную на С#), а другая использует собственные криптографические API операционной системы для того же алгоритма.