在高负载下,ASP.NET Core生成“000000...”SHA256哈希的问题通常是由于并发访问同一个哈希算法实例而导致的。以下是一些解决方法:
ThreadLocal
来实现。以下是一个示例代码:private static ThreadLocal sha256 = new ThreadLocal(() => SHA256.Create());
public string ComputeHash(string input)
{
var hashBytes = sha256.Value.ComputeHash(Encoding.UTF8.GetBytes(input));
return BitConverter.ToString(hashBytes).Replace("-", string.Empty);
}
HashAlgorithm.Create()
方法创建实例,并使用TransformBlock()
和TransformFinalBlock()
方法异步计算哈希。以下是一个示例代码:public async Task ComputeHashAsync(string input)
{
using (var sha256 = HashAlgorithm.Create("SHA256"))
{
var inputBytes = Encoding.UTF8.GetBytes(input);
var hashBytes = await Task.Run(() => sha256.ComputeHash(inputBytes));
return BitConverter.ToString(hashBytes).Replace("-", string.Empty);
}
}
请注意,这只是一些解决方法的示例,具体的实现方式可能因应用程序的需求而有所不同。