【发布时间】:2021-01-07 13:03:48
【问题描述】:
我在应用程序中编写了以下代码。
var salt = "0115ee62e6e5e8ea68db9e2d7e72cec85e810ad9566212ffc2c4b76a17ca0b00";
var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(salt ?? string.Empty);
它在“asp.net core”和“标准”框架中具有不同的行为。
框架 4.7: 如果我将在.net 标准框架中创建的网站/控制台应用程序中使用此代码,它总是给我相同的结果。 hashcode 变量的值始终为“1066337973”。
Asp.net 核心: 如果我在 asp.net core 网站中使用这段代码,那么每次我停止应用程序并重新启动时,hashcode 变量都有不同的值。
由于这个问题,我的逻辑在 asp.net 核心应用程序中失败了。
这个问题怎么解决?
【问题讨论】:
-
加盐密码:最佳实践? stackoverflow.com/questions/674904/…
-
@RomanRyzhiy,我为加密和解密编写了一个很大的逻辑,并且在其他 .net 框架中运行良好。当我尝试对 .net 核心应用程序使用相同的逻辑时,它对我不起作用。
-
GetHashCode在 .NET Core 中的实现已更改,这是预期行为,请查看这篇文章 Why is string.GetHashCode() different each time I run my program in .NET Core? -
Remarks section of
GetHashCode告诉你不要持久化哈希值,也不要使用哈希码代替加密哈希函数返回的值 -
另外,来自
String.GetHashCode相同字符串的哈希码可能因 .NET 实现、跨 .NET 版本以及跨 .NET 平台(例如 32 位和 64 位)而有所不同对于单一版本的 .NET。在某些情况下,它们甚至可能因应用程序域而异。这意味着同一程序的两次后续运行可能会返回不同的哈希码。
标签: c# .net asp.net-core .net-core frameworks