Что означает имя класса, заканчивающееся "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 операционной системы для того же алгоритма.