C# · 12月 24, 2021

c# – ObjectDisposedException使用MD5 ComputeHash时

我收到ObjectDisposedException:安全句柄已关闭.

这是我的代码:

我正在尝试创建一个接口并实现类,这将使我能够获取一个字符串,附加一个已知的密钥,为此字符串和密钥计算MD5哈希,并返回计算的哈希:

public interface ISignService{ string GetSignature(string str);}public class SignService : ISignService{ private readonly ISignSettings _signSettings; private readonly HashAlgorithm _hashAlgo; public SignService(ISignSettings signSettings) { _signSettings = signSettings; _hashAlgo = MD5.Create(); } public string GetSignature(string str) { var strWithKey = str + _signSettings.EncryptionKey; var hashed = _hashAlgo.ComputeHash(Encoding.UTF8.GetBytes(strWithKey)); return hashed.ToHexString(); }}

谢谢

解决方法 您的代码不是线程安全的. _hashAlgo不能在线程之间共享.请注意,您看到的异常不是唯一可能导致的问题;我相信这个问题也可能导致错误的哈希值.您需要每次都创建一个新的HashAlgorithm对象,或者查看线程局部文件以为每个线程创建一个实例.