Почему SHA1.ComputeHash терпит неудачу при высокой нагрузке со многими потоками?
Я вижу проблему с некоторым кодом, который я поддерживаю. Код ниже имеетprivate static SHA1
член (который являетсяIDisposable
но так как этоstatic
это никогда не должно быть завершено). Однако в состоянии стресса этот код вызывает исключение, которое предполагает, что он был закрыт:
Caught exception. Safe handle has been closed"
Stack trace: Call stack where exception was thrown
at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
at System.Security.Cryptography.Utils.HashData(SafeHashHandle hHash, Byte[] data, Int32 cbData, Int32 ibStart, Int32 cbSize)
at System.Security.Cryptography.Utils.HashData(SafeHashHandle hHash, Byte[] data, Int32 ibStart, Int32 cbSize)
at System.Security.Cryptography.HashAlgorithm.ComputeHash(Byte[] buffer)
Код в вопросе:
internal class TokenCache
{
private static SHA1 _sha1 = SHA1.Create();
private string ComputeHash(string password)
{
byte[] passwordBytes = UTF8Encoding.UTF8.GetBytes(password);
return UTF8Encoding.UTF8.GetString(_sha1.ComputeHash(passwordBytes));
}
Мой вопрос, очевидно, что может вызвать эту проблему. Можно позвонитьSHA1.Create
молча провалиться (сколько криптографических ресурсов доступно)? Может ли это быть вызвано падением appdomain?
Любые другие теории?