मैं निम्नलिखित उपयोग के मामले है:क्या एक .NET हैश एल्गोरिदम की प्रतिलिपि बनाना संभव है (बार-बार वृद्धिशील हैश परिणाम के लिए)?
- पढ़ें n एक फ़ाइल से बाइट्स
- कंप्यूट (MD5) इन n बाइट्स के लिए हैश
- पढ़ें फ़ाइल
- कंप्यूट (MD5) हैश से अगले मीटर बाइट्स फ़ाइल के लिए एन + एम बाइट्स
बढ़ती हुई फाइल को समस्या नहीं है, just call TransformBlock
and TransformFinalBlock
।
समस्या यह है कि मैं डेटा इसकी शुरुआत बाइट्स प्रयोग करती है, के कई हैश की जरूरत है, लेकिन उसके बाद मैं TransformFinalBlock
कहा जाता है पहले n
बाइट्स मैं एक ही वस्तु के साथ हैश करने के लिए जारी नहीं रख सकते की Hash
पढ़ सकते हैं और एक नया एक की जरूरत है।
समस्या के लिए सर्च कर रहे हैं, मैंने देखा कि दोनों Python के साथ-साथ OpenSSL वास्तव में इस उद्देश्य के लिए एक हैशिंग वस्तु कॉपी करने के लिए एक विकल्प है: एक प्रति वापसी
hash.copy()
(हैश ऑब्जेक्ट का "क्लोन")। यह का उपयोग स्ट्रिंग्स के डायजेस्ट को कुशलतापूर्वक गणना करने के लिए किया जा सकता है जो एक सामान्य प्रारंभिक सबस्ट्रिंग साझा करते हैं।
EVP_MD_CTX_copy_ex() संदेश बाहर करने के लिए से राज्य को पचाने कॉपी करने के लिए इस्तेमाल किया जा सकता। यह उपयोगी है अगर बड़ी मात्रा में डेटा को धोया जाना है जो पिछले कुछ बाइट्स में भिन्न है। इस फ़ंक्शन को कॉल करने से पहले प्रारंभ करना होगा।
सर्च कर रहे हैं के रूप में मैं, मैं भीतर स्टॉक सी # HashAlgorithm कुछ भी है कि अनुमति होगी मुझे प्रभावी रूप से Clone()
== इस तरह के एक वस्तु कॉपी करने के लिए से पहले अपने TransformFinalBlock
विधि बुला नहीं मिल सकता है हो सकता है - और बाद में हैश करने के लिए जारी रखने के लिए क्लोन के साथ शेष डेटा।
मुझे C# reference implementation for MD5 मिला जो क्लोनिंग (*) का समर्थन करने के लिए छोटे से अनुकूलित किया जा सकता है लेकिन कोडबेस में ऐसी चीज पेश करने के बजाय वहां क्या है, इसका उपयोग करना पसंद करता है।
(*) दरअसल, जहाँ तक मैं समझता हूँ, किसी भी हैशिंग एल्गोरिथ्म (के रूप में एन्क्रिप्शन/डिक्रिप्शन के खिलाफ) मैं जाँच करने के लिए परेशान किया है तुच्छता copyable क्योंकि सभी राज्य इस तरह के एक एल्गोरिथ्म है एक का एक रूप है है डाइजेस्ट।
तो क्या मुझे यहां कुछ याद आ रहा है या मानक सी #/.NET इंटरफ़ेस वास्तव में हैश ऑब्जेक्ट की प्रतिलिपि बनाने का तरीका नहीं प्रदान करता है?
एक और डेटा बिंदु:
CryptDuplicateHash समारोह बनाने के लिए इस्तेमाल किया जा सकता है:
माइक्रोसॉफ्ट के खुदcrypto services के लिए देशी एपीआई एक समारोह
CryptDuplicateHash
, जो राज्य के डॉक्स, बोली है एक ही सामग्री के साथ शुरू होने वाली दो अलग-अलग सामग्री के अलग हैंश ।
विंडोज एक्सपी के आसपास के आसपास थे। : - |
नोट wrt। एमडी 5: उपयोग का मामला क्रिप्टोग्राफिक रूप से संवेदनशील नहीं है। बस विश्वसनीय फ़ाइल चेकसमिंग।
इसके साथ एक मुद्दा मामूली रूप से क्लोनेबल नहीं है, कुछ कक्षाएं मूल संसाधनों का उपयोग कर सकती हैं या हैंडल के साथ विशेष हार्डवेयर को कॉल कर सकती हैं। उन प्रकार के वर्ग क्लोन के लिए आसान नहीं होगा। –
@ स्कॉट - धन्यवाद। हाँ मुझे लगता है कि कुछ कक्षाएं हो सकती हैं। फिर भी, जो * * नहीं *, एमडी 5 की तरह, वास्तव में क्लोनबल होना चाहिए। तो कोई रास्ता नहीं है? –
ऐसा लगता है कि अगर आप एक उथली प्रतिलिपि भी चाहते हैं तो आपको पूरी चीज को फिर से बनाना होगा और इसे स्वयं बनाना होगा। –