В чем разница между ASP. NET Core 3.1 SHA512 и SHA256Managed - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время я использую SHA256Managed в ASP.NET Core 3.1, и для большей безопасности я хотел бы использовать Hash512.

. Постфикс Managed предполагает, что один является управляемым кодом, а другой - Это не так.

Может ли кто-нибудь объяснить, какие проблемы следует учитывать при использовании неуправляемого или управляемого? Требует ли неуправляемое какого-либо специального развертывания, например, в требованиях к контейнеру или операционной системе Docker.

    private string Hash512(string str) {
        var message = Encoding.Unicode.GetBytes(str);
        var hash = SHA512.Create();

        var hashValue = hash.ComputeHash(message);
        return Encoding.Unicode.GetString(hashValue);
    }

    public string Hash256(string str)
    {
        var message = Encoding.Unicode.GetBytes(str);
        var hash = new SHA256Managed();

        var hashValue = hash.ComputeHash(message);
        return Encoding.Unicode.GetString(hashValue);
    }

1 Ответ

0 голосов
/ 07 апреля 2020

(Первоначально я отметил это как дубликат Разница между SHA256CryptoServiceProvider и SHA256Managed - однако этот вопрос конкретно относится к контексту ASP. NET Core 3.x, который не ' t так же, как связанный вопрос (. NET Framework на Windows).)

Вы объединяете две разные вещи:

  • SHA256 представляет 256-битный вариант криптографической функции SHA-2 c, в то время как SHA256Managed, SHA256CryptoServiceProvider и SHA256Cng являются ее реализациями.

  • SHA512 представляет 512-битный вариант криптографической функции SHA-2 c hasing, а SHA512Managed, SHA512CryptoServiceProvider и SHA512Cng - ее реализации.

Различия между 256-битной и 512-битной версиями SHA-2 описаны в Википедии . Обратите внимание, что. NET не поддерживает 224-битную версию, но поддерживает 256, 384 и 512-битные версии.

Что касается различий между SHA{bits} (интерфейс) и SHA{bits}Managed, SHA{bits}CryptoServiceProvider и SHA{bits}Cng:

  • . NET Framework и. NET Core поддерживают несколько различных реализаций одних и тех же алгоритмов хеширования, это может быть потому, что некоторые реализации могут быть аппаратно ускорены, предоставляется операционной системой или полностью реализован на C # / Managed-code.
  • SHA256 - это абстрактный базовый класс, который определяет интерфейс всех реализаций хэш-функции SHA-2 (256-бит). То же самое SHA512 для функции SHA-2 (512-бит).
  • SHA256ManagedSHA512Managed) - это 100% реализаций C # / управляемого кода, которые работают медленно по сравнению с собственным или OS- предоставленные реализации. Это единственная реализованная реализация, встроенная в. NET Core.
  • SHA256CryptoServiceProvider и SHA256Cng - это реализации, предоставляемые ОС, которые могут использоваться для более быстрой производительности или для соответствия FIPS (например, * 1050). * не соответствует FIPS). Если вы не знаете, нужно ли вам беспокоиться о соответствии FIPS, вам, вероятно, не нужно беспокоиться об этом (т.е., если вы не работаете в федеральном правительстве США или юридическая команда вашей компании не проинформировала вас о соответствии вашего проекта нормативным требованиям требования).
    • Кроме того, SHA256CryptoServiceProvider и SHA256Cng не встроены в. NET Core, только. NET Framework.
  • The SHA256.Create() Метод - это фабричный метод, который предназначен для возврата «лучшей» реализации для текущей платформы - в. NET Core он всегда возвращает экземпляр SHA256Managed.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...