Разница между SHA256CryptoServiceProvider и SHA256Managed - PullRequest
32 голосов
/ 24 августа 2010

.Net SHA256Managed класс поддерживается во всех версиях фреймворка, а класс SHA256CryptoServiceProvider поддерживается только в фреймворке 3.5 и выше.

Почему введен SHA256CryptoServiceProvider? Кажется, он делает то же самое, что и класс SHA256Managed, но последний работает лучше.

Чего мне не хватает и почему я должен использовать SHA256CryptoServiceProvider?

Ответы [ 3 ]

60 голосов
/ 12 ноября 2010

Это никак не связано с производительностью - SHA256CryptoServiceProvider использует проверенный FIPS 140-2 проверенный *1003* (FIPS = Федеральный стандарт обработки информации) провайдер криптографических услуг (CSP), а SHA256Managed - нет.SHA256Managed - это чисто управляемая реализация, в то время как SHA256CryptoServiceProvider, по-видимому, делает то же самое, но оборачивает CryptoAPI.

Это имеет большие последствия, если вы собираетесь работать с федеральными системами США или многими государственными системами, как этотребование к поставщикам программного обеспечения.По мнению NIST, использование не проверенного FIPS криптографического модуля, такого как реализация SHA256Managed, ничем не отличается от использования какого-либо шифрования вообще.

Если вам не нужна проверка FIPS, тогдаSHA256Managed в порядке.

Все, что заканчивается в Cng, означает «Crytographic API: Next Generation», которое относится к более новым протоколам, которые правительство США называет криптографическими алгоритмами Suite B, но независимо от версии платформы .Net.до Vista / Server 2008 не поддерживается).

Поэтому используйте алгоритм и реализацию, подходящую для того, что вы защищаете.Вы будете ограничены тем, какую версию .Net framework вы используете, какую операционную систему (ы), на которой работает ваш код, и необходимость использования проверенных модулей FIPS 140-2 / 140-3 (выпускается в 2011 году),Если не поддерживается поддерживаемый класс .Net Framework для нужной комбинации, доступны сторонние модули, и вы также можете раскрыться и при необходимости использовать неуправляемый CAPI.

Если у вас бессонница, вы можетеможно найти лекарство в http://csrc.nist.gov/groups/STM/cmvp/standards.html#02

4 голосов
/ 15 августа 2014

Я хотел добавить некоторую информацию об этом, так как только что столкнулся с проблемой, которая заставила меня перейти на использование версии CSP.Извините, я не могу добавить комментарий (слишком низкое значение).

Для проверки этого вы можете быстро включить FIPS, установив HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ FipsAlgorithmPolicy \ Enabled to 1. Затем загрузите Visual Studioи попробуйте построить проект, который использует SHA256Managed.Вы получите сообщение об ошибке: «Эта реализация не является частью проверенных криптографических алгоритмов FIPS платформы Windows».Фактически, вы получите это для любых * алгоритмов управляемой криптографии.

Теперь поменяйте местами SHA256Managed с SHA256CryptoServiceProvider и пересоберите.Пуф, ошибки исчезают!

Примечание. Если вы развернули программу и клиент включил FIPS, он выдаст InvalidOperationException с тем же сообщением об ошибке, приведенным выше.

2 голосов
/ 24 августа 2010

Оба сгенерируют один и тот же хэш.Единственное отличие состоит в том, что SHA256Managed является управляемой реализацией хеширования.

Также обратите внимание, что SHA256CryptoServiceProvider использует провайдеров криптографических услуг операционной системы, и даже если у вас установлен .NET 3.5, для работы потребуется Windows XP с SP3, 7 или 2008.

Что касается преимуществ, использование SHA256CryptoServiceProvider должно дать вам лучшую производительность, чем SHA256Managed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...