ASP.NET Core 3.1 SHA512 和 SHA256Managed 之间有什么区别

Way*_*yne 5 c# asp.net-core

我目前正在使用SHA256Managedin 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);
    }
Run Code Online (Sandbox Code Playgroud)

Dai*_*Dai 5

(我最初将此标记为 SHA256CryptoServiceProvider 和 SHA256Managed 之间的差异的重复- 但是这个问题专门在 ASP.NET Core 3.x 的上下文中,与链接的问题(Windows 上的 .NET Framework)不同。)

你混淆了两种不同的东西:

  • SHA256代表 SHA-2 加密哈希函数的 256 位风格,而 、SHA256ManagedSHA256CryptoServiceProviderSHA256Cng是其实现。

  • SHA512代表 SHA-2 加密哈希函数的 512 位风格,而 、SHA512ManagedSHA512CryptoServiceProviderSHA512Cng是其实现。

256 位和 512 位版本 SHA-2 之间的差异记录在 Wikipedia 上。请注意,.NET 不支持 224 位版本,但支持 256、384 和 512 位版本。

SHA{bits}关于(接口) 和SHA{bits}ManagedSHA{bits}CryptoServiceProvider和 之间的区别SHA{bits}Cng

  • .NET Framework 和 .NET Core 支持相同哈希算法的多种不同实现,这可能是因为某些实现可能是硬件加速的、由操作系统提供或完全用 C#/托管代码实现。
  • SHA256是一个抽象基类,定义 SHA-2(256 位)哈希函数的所有实现的接口。SHA512SHA-2(512 位)函数也是如此。
  • SHA256Managed( 和SHA512Managed) 是 100% C#/托管代码实现,与本机或操作系统提供的实现相比,运行速度确实很慢。这是 .NET Core 中内置的唯一实现。
  • SHA256CryptoServiceProviderSHA256Cng操作系统提供的实现,可用于更快的性能或符合 FIPS 要求(因为SHA256Managed不符合 FIPS 要求)。如果您不知道是否需要担心 FIPS 合规性,那么您可能不需要担心(即,除非您为美国联邦政府工作或您公司的法律团队已告知您项目的法规合规性)要求)。
    • 此外,SHA256CryptoServiceProviderSHA256Cng不是内置于 .NET Core 中,仅内置于 .NET Framework 中。
  • SHA256.Create()方法是一个工厂方法,旨在返回当前平台的“最佳”实现 - 在 .NET Core 中,它始终返回SHA256Managed.