Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Core 3.1 SHA512和SH256Managed之间的区别是什么_C#_Asp.net Core - Fatal编程技术网

C# ASP.NET Core 3.1 SHA512和SH256Managed之间的区别是什么

C# ASP.NET Core 3.1 SHA512和SH256Managed之间的区别是什么,c#,asp.net-core,C#,Asp.net Core,我目前正在ASP.NET Core 3.1中使用SHA256Managed,为了更安全,我想使用Hash512 Managed后缀表示一个是托管代码,而另一个不是 有人能解释一下在使用非托管VS时需要考虑的问题吗?非托管服务器是否需要任何特殊部署,例如Docker容器中的部署/或操作系统要求 private string Hash512(string str) { var message = Encoding.Unicode.GetBytes(str);

我目前正在
ASP.NET Core 3.1
中使用
SHA256Managed
,为了更安全,我想使用
Hash512

Managed
后缀表示一个是托管代码,而另一个不是

有人能解释一下在使用非托管VS时需要考虑的问题吗?非托管服务器是否需要任何特殊部署,例如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);
    }
(我最初将此标记为-的副本,但是此问题是在ASP.NET Core 3.x的上下文中提出的,它与链接问题(.NET Framework on Windows)不同。)

你把两件不同的事情混为一谈:

  • SHA256
    表示SHA-2加密hasing函数的256位风格,而
    SHA256Managed
    SHA256CryptoServiceProvider
    SHA256Cng
    是其实现

  • SHA512
    表示SHA-2加密hasing函数的512位风格,而
    SHA512管理的
    SHA512CryptoServiceProvider
    SHA512Cng
    是其实现

。请注意,.NET不支持224位版本,但支持256、384和512位版本

关于
SHA{bits}
(接口)和
SHA{bits}管理的
之间的差异,
SHA{bits}加密服务提供商
SHA{bits}Cng

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

您的问题到底是什么?比较
SHA512
SHA256Managed
?您的问题实际上是关于
SHA256
SHA256Managed
的区别吗?谢谢您的反馈。我已经更新了我的问题,希望现在问题更清楚了。亲爱的Dai,如果我没有读错的话,GitHub上的.Net Core repository对SAH256Managed和SHA512 Managed类的解释是相反的。SHA512Managed类为.Net Framework提供了一个完全托管的实现,是的,但对于,它似乎总是链接到本机实现,windows上的本机实现是用于共享Dai的BcryptHanks,解释得很好。@OguzOzgul
bcrypt
与SHA毫无关系。bcrypt也不是.NET框架或.NET核心的一部分-您在哪里看到的?至于
SHA512Managed
没有得到充分的管理,随着即将发布的“.NET 5”的发布,情况似乎正在发生变化。就.NET Core 3.0和.NET Framework 4.8而言,我认为答案中的信息是正确的。在我的评论中的链接(.NET Core源代码,SHA512Managed.cs)<代码>->HashProviderDispenser->HashProviderCng->Interop.BCrypt.BCryptCreateHash()@OguzOzgul。对不起,我对此没有解释。这可能是一种向后兼容的尝试?