Какой из них использовать: алгоритмы хэширования с управляемым или неуправляемым - PullRequest
16 голосов
/ 17 марта 2011

В обычном приложении C # какой класс использовать для хеширования: xxxManaged или xxx (то есть SHA1Managed против SHA1) и почему?

Ответы [ 6 ]

10 голосов
/ 17 марта 2011

Неуправляемые хэши, оканчивающиеся на ***Cng, то есть SHA256Cng , также будут иметь ограничения платформы. Они работают немного быстрее, чем управляемые альтернативы, но, например, потерпят неудачу во время выполнения в Windows XP. Если вы знаете, что ваша программа всегда будет работать в Windows 7, Vista SP1 или 2008, тем не менее, они, как правило, будут работать немного лучше, чем управляемые версии, даже с собственными издержками взаимодействия.

Если вы пишете программу общего назначения, с классами ***Managed будет проще работать, поскольку они всегда будут работать.

7 голосов
/ 17 марта 2011

Вы должны использовать варианты *Managed; они обычно быстрее.

Классы *CryptoProvider и *CNG используют встроенное взаимодействие и обычно работают медленнее.
Однако я слышал, что они могут использовать аппаратные крипто-ускорители. (Я этого не проверял)

Кроме того, нативные версии сертифицированы FIPS; управляемые версии не являются.

1 голос
/ 17 марта 2011

Управляемые версии написаны с использованием полностью управляемого кода, версии * Provider являются оболочкой для API. Поэтому, если вы всегда используете управляемые версии, ваш код будет переносимым, например, Mono, но если вы используете версию провайдера, вы будете ограничены платформами Windows.

1 голос
/ 17 марта 2011

Управляемая библиотека безопаснее в использовании и не требует дополнительных затрат PInvoke.Также для долгосрочных приложений (ASP.NET), в которых могут накапливаться утечки памяти для сбоя сервера, также предпочтительнее управляемый.

0 голосов
/ 29 августа 2018

Другим отличием между версиями Managed и CNG Non-Managed является поддерживаемая версия .Net Framework: например,

  • Управляемая версия AES начинается с 3.5, а CNG с 4.6.2 и для
  • SHA512, Управляется начинается с 1,1 и Cng с 3,5.

Однако я считаю, что если мы не ограничены версией фреймворка или не поддерживаем устаревшие версии ОС, нам следует использовать версии CNG :

  • Алгоритмы хеширования с постфиксом Cng - единственные, которые используют bcrypt
  • Тот факт, что это может занять больше времени, на самом деле является преимуществом, поскольку он защищает от атак грубой силы: на стороне пользователя 300 мс или 3 мс не имеет значения, в то время как для атакующего это величина порядка 100!
0 голосов
/ 17 марта 2011

Управляемые классы, как правило, «безопаснее» использовать в .NET;они реализуют определенные интерфейсом интерфейсы, такие как IDisposable и ICryptoServiceProvider.Однако они немного медленнее из-за управляемого компонента.Вы должны использовать управляемый класс, если вам нужно создавать и уничтожать эти помощники по желанию и / или если вам нужно реализовать шаблоны проектирования на основе интерфейса.

Неуправляемые классы обычно быстрее (поскольку они предварительно скомпилированык машинному коду), но может быть трудно работать.Уничтожение экземпляра неуправляемого класса может быть проблематичным, а иногда и невозможным.Вы должны использовать их, если не существует управляемой оболочки, которая будет делать то же самое (поскольку вы, скорее всего, в конечном итоге реализуете свою собственную оболочку для неуправляемого класса для обработки экземпляров, взаимодействия и уничтожения), или если используется одно-off.

...