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)不同。)
你把两件不同的事情混为一谈:
表示SHA-2加密hasing函数的256位风格,而SHA256
、SHA256Managed
和SHA256CryptoServiceProvider
是其实现SHA256Cng
表示SHA-2加密hasing函数的512位风格,而SHA512
、SHA512管理的
和SHA512CryptoServiceProvider
是其实现SHA512Cng
SHA{bits}
(接口)和SHA{bits}管理的
之间的差异,SHA{bits}加密服务提供商
和SHA{bits}Cng
:
- NET Framework和.NET Core支持相同哈希算法的多个不同实现,这可能是因为某些实现可能是硬件加速的,由操作系统提供,或者完全用C#/托管代码实现
是一个抽象基类,它定义了SHA-2(256位)哈希函数的所有实现的接口。对于SHA-2(512位)函数,同上SHA256
(和SHA256Managed
)是100%的C#/Managed代码实现,与本机或操作系统提供的实现相比运行缓慢。这是提供的唯一一个内置到.NET核心的实现SHA512Managed
和SHA256CryptoServiceProvider
是操作系统提供的实现,可用于更快的性能或FIPS合规性(因为SHA256Cng
不符合FIPS)。如果您不知道是否需要担心FIPS合规性,那么您可能不需要担心它(即,除非您为美国联邦政府工作,或者您公司的法律团队已通知您项目的法规遵从性要求)。SHA256Managed
- 此外,
和SHA256CryptoServiceProvider
不是内置到.NET核心的,只是.NET框架SHA256Cng
- 此外,
方法是一种工厂方法,用于返回当前平台的“最佳”实现-在.NET Core中,它始终返回SHA256.Create()
的实例SHA256Managed
SHA512
和SHA256Managed
?您的问题实际上是关于SHA256
和SHA256Managed
的区别吗?谢谢您的反馈。我已经更新了我的问题,希望现在问题更清楚了。亲爱的Dai,如果我没有读错的话,GitHub上的.Net Core repository对SAH256Managed和SHA512 Managed类的解释是相反的。SHA512Managed类为.Net Framework提供了一个完全托管的实现,是的,但对于,它似乎总是链接到本机实现,windows上的本机实现是用于共享Dai的BcryptHanks,解释得很好。@OguzOzgulbcrypt
与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。对不起,我对此没有解释。这可能是一种向后兼容的尝试?