我收到了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();
}
}
由于
答案 0 :(得分:8)
您的代码不是线程安全的。线程之间无法共享_hashAlgo
。请注意,您看到的异常不是唯一可能导致的问题;我相信这个问题也可能导致错误的哈希值。您需要每次都创建一个新的HashAlgorithm
对象,或者查看线程本地,以便为每个线程创建一个实例。
答案 1 :(得分:2)
代码似乎工作正常。问题可能是:
MDS.Create()
移至GetSignature()
SignService
或_hashAlgo
)?
如果是这样,请不要将其丢弃或在需要时重新创建。