2009-08-26 14 views
5

मेमोरी में पूरे बफर के बिना हैश की गणना करें, मैं एक ऑपरेशन कर रहा हूं जहां मुझे किसी घटक से कुछ बाइट प्राप्त होते हैं, कुछ प्रोसेसिंग करते हैं, और फिर इसे अगले घटक पर भेजते हैं। मुझे किसी भी समय दिए गए सभी डेटा के हैश की गणना करने में सक्षम होना चाहिए - और डेटा आकार के कारण; मैं इसे स्थानीय बफर में नहीं रख सकता।एक बार

इन परिस्थितियों में आप (MD5) हैश की गणना कैसे करेंगे?

मुझे लगता है कि मुझे हैश के मध्यवर्ती परिणाम को पकड़ने में सक्षम होना चाहिए, और जितना डेटा मैं जाता हूं उसे जोड़ सकता हूं। लेकिन क्या इनमें से कोई भी अंतर्निहित ढांचा वर्ग इसका समर्थन करता है?

उत्तर

7

आप बस कक्षा के TransformBlock और TransformFinalBlock सदस्यों का उपयोग करना चाहते हैं, जो आपको हैश में गणना करने की अनुमति देता है।

MSDN का यह एक अच्छा उदाहरण है कि यह कैसे करें।

+0

ट्रांसफॉर्मब्लॉक/ट्रांसफॉर्मफिनब्लॉक काम करता है; लेकिन यदि ट्रांसफॉर्मफिनलब्लॉक फ़ंक्शन पर आप जिन हिस्सों को पास कर सकते हैं, वे हैंश की तुलना में समान आकार या बड़े नहीं हैं, तो आपको TransformFinalBlock को कॉल करने के बाद हैश प्राप्त करने के लिए हैश एल्गोरिदम। हैश प्रॉपर्टी का उपयोग करने की आवश्यकता है। – driis

+0

आह, खुशी है कि यह अब आपके लिए काम कर रहा है। – Noldorin

0

यह थोड़ा आश्चर्यजनक है कि यह बॉक्स में नहीं आता है।

यदि आप सदस्य चर में MD5CryptoServiceProvider बनाते हैं, और बार-बार ComputeHash() को कॉल करते हैं, तो यह एक परिशिष्ट के रूप में काम नहीं करता है?

+0

नहीं, बार-बार गणना करें, काम नहीं करता है। ट्रांसफॉर्मब्लॉक/ट्रांसफॉर्मफिनब्लॉक दृष्टिकोण काम करता प्रतीत होता है, मैं वर्तमान में इसका परीक्षण कर रहा हूं। – driis