2012-08-31 19 views
5

का उपयोग करते समय मुझे ऑब्जेक्ट डिस्प्ले अपवाद प्राप्त हो रहा है: सुरक्षित हैंडल बंद कर दिया गया है।ऑब्जेक्ट डिस्प्ले एक्सेप्शन MD5 ComputeHash

यह मेरा कोड है:

मैं एक इंटरफेस बनाने के लिए कोशिश कर रहा हूँ और वर्ग है कि मुझे एक स्ट्रिंग प्राप्त करने के लिए सक्षम हो जाएगा, यह करने के लिए संलग्न एक ज्ञात कुंजी, इस स्ट्रिंग और चाबी के लिए 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(); 
    } 
} 

धन्यवाद

+2

कोड की कौन सी लाइन अपवाद फेंकता है? – ken2k

+0

क्या हैश किया गया है। ToHexString() 'एक विस्तार विधि? मैंने आपका कोड चिपकाया और विधि मौजूद नहीं है ... – Laoujin

+0

हाय, यह एक विस्तार विधि है। जो पंक्ति फेंकता है वह है: var hashed = _hashAlgo.ComputeHash (एन्कोडिंग .UTF8.GetBytes (strWithKey)); – user1625867

उत्तर

1

कोड ठीक काम करने के लिए प्रकट होता है। समस्या हो सकती है:

  1. क्या वस्तु निर्माण और उपयोग के बीच क्रमबद्ध और deserialized किया जा रहा है? यदि ऐसा है, तो MDS.Create() को GetSignature()
  2. पर स्थानांतरित करें क्या वस्तु का निपटारा किया जा रहा है (या तो SignService या _hashAlgo)? यदि ऐसा है तो इसे निपटान न करें या आवश्यकता होने पर इसे फिर से बनाएं।
5

आपका कोड थ्रेड-सुरक्षित नहीं है। _hashAlgo धागे के बीच साझा नहीं किया जा सकता है। ध्यान दें कि आप जो अपवाद देखते हैं वह एकमात्र समस्या नहीं है जिसके परिणामस्वरूप परिणाम हो सकता है; मेरा मानना ​​है कि समस्या भी गलत हैश मूल्यों का कारण बन सकती है। आपको प्रत्येक बार एक नया HashAlgorithm ऑब्जेक्ट बनाने या प्रति थ्रेड एक उदाहरण बनाने के लिए थ्रेड स्थानीय में देखने की आवश्यकता है।

+0

यह संभवतः सही उत्तर है। [तनाव के तहत फाइनलाइज़र मुद्दा?] का उत्तर देखें (http://stackoverflow.com/a/26592826/1945631)। उसी 'हैश एल्गोरिदम' उपclass उदाहरण पर उदाहरण विधियों के समवर्ती उपयोग इस अपवाद का कारण बन जाएगा। –

+1

'वह समस्या भी गलत हैश मानों का कारण बन सकती है' - यह सच है। मैंने कुछ समय पहले एक ही समस्या का सामना किया और हल किया। – Denis