Что означает имя класса, оканчивающееся на «управляемый» (C # .NET)? - PullRequest
10 голосов
/ 01 мая 2011

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

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

Также, когда следует использовать «управляемую» классификацию, например, когда выбрать Aes вместо AesManaged ?

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

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

Ответы [ 4 ]

17 голосов
/ 01 мая 2011

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

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

6 голосов
/ 01 мая 2011

Взгляните на раздел Remarks:

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

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

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

3 голосов
/ 01 мая 2011

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

1 голос
/ 01 мая 2011

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

...