2009-02-16 26 views
10

हाय का SHA हैश मैं एक 5 Gig फ़ाइलडेल्फी: कैसे एक बड़ी फ़ाइल

आप एक गैर स्ट्रिंग आधारित डेल्फी पुस्तकालय है कि यह कर सकते हैं के बारे में पता है पर एक SHA उत्पन्न करने के लिए की जरूरत है की गणना करने के?

उत्तर

13

आपको DCPcrypt v2 का उपयोग करना चाहिए और अपनी फ़ाइल को बफर के साथ एसएचए हैशर को बफर करना चाहिए और जब तक आप पूरी 5 जीबी फ़ाइल नहीं पढ़ लेते हैं।

यदि आप जानना चाहते हैं कि बड़ी फ़ाइल को कैसे पढ़ा जाए, तो मेरा उत्तर about a file copy using custom buffering देखें।

अवधारणा में

तो (कोई वास्तविक डेल्फी कोड!):

function GetShaHash(const AFilename: String) 
begin 
    sha := TSHAHasher.Create; 
    SetLength(Result, sha.Size); 
    file := OpenFile(AFilename, GENERIC_READ); 
    while not eof file do 
    begin 
    BytesRead := ReadFile(file, buffer[0], 0, 1024 * 1024); 
    sha.Update(buffer[0], BytesRead); 
    end; 
    sha.Final(Result[0]); 
    CloseFile(file); 
end; 
+0

मैंने वास्तविक डेल्फी कोड शामिल नहीं किया क्योंकि मेरे पास इस समय डेल्फी कंपाइलर स्थापित नहीं है। –

0

ओपनएसएसएल के लिए डेल्फी इंटरफ़ेस है, है ना?

आपको बेहतर प्रदर्शन प्रदान करना चाहिए।

5

मैं वोल्फगैंग Ehrhardt के सीआरसी/हैश की सिफारिश करेंगे।
http://home.netsurf.de/wolfgang.ehrhardt/

यह तेज़ है और "सबसे वर्तमान पास्कल के साथ संकलित किया जा सकता (टी.पी. 5/5.5/6, बी पी 7, उपाध्यक्ष 2.1, पांचवें वेतन आयोग 1.0/2.0/2.2) और डेल्फी संस्करणों (V7 अप करने के लिए V1 के साथ परीक्षण किया/9/10) "।

मैंने इसे डी 11/डी 12 के साथ भी उपयोग किया है।

+0

हाँ, यह भी एक अच्छा है, बहुत अच्छा एएसएम अनुकूलन :) –

0

यदि मुझे सही याद है, तो इंडी कई स्ट्रीम आधारित हैश विधियों के साथ आता है।

संबंधित मुद्दे