मेरे कोड में, मुझे सीआरसी 32 सहित विभिन्न एल्गोरिदम का उपयोग करके हैश फाइलों की आवश्यकता है। चूंकि मैं Digest
परिवार में अन्य क्रिप्टोग्राफिक हैश फ़ंक्शंस का भी उपयोग कर रहा हूं, मैंने सोचा कि उन सभी के लिए एक सतत इंटरफेस बनाए रखना अच्छा होगा।डाइजेस्ट :: सीआरसी 32 ज़्लिब
रिकॉर्ड के लिए, मुझे digest-crc
मिला, एक मणि जो वास्तव में मैं चाहता हूं। बात यह है कि, Zlib
मानक पुस्तकालय का हिस्सा है और इसमें सीआरसी 32 का एक कार्यान्वयन कार्यान्वयन है जिसे मैं पुन: उपयोग करना चाहता हूं। इसके अलावा, यह सी में लिखा गया है, इसलिए इसे digest-crc
के संबंध में बेहतर प्रदर्शन प्रदान करना चाहिए, जो शुद्ध-रूबी कार्यान्वयन है।
Digest::CRC32
को लागू वास्तव में पहली बार में बिल्कुल स्पष्ट देखा:
%w(digest zlib).each { |f| require f }
class Digest::CRC32 < Digest::Class
include Digest::Instance
def update(str)
@crc32 = Zlib.crc32(str, @crc32)
end
def initialize; reset; end
def reset; @crc32 = 0; end
def finish; @crc32.to_s; end
end
सब कुछ सही लग रहा है:
crc32 = File.open('Rakefile') { |f| Zlib.crc32 f.read }
digest = Digest::CRC32.file('Rakefile').digest!.to_i
crc32 == digest
=> true
दुर्भाग्य से, नहीं सब कुछ काम करता है:
Digest::CRC32.file('Rakefile').hexdigest!
=> "313635393830353832"
# What I actually expected was:
Digest::CRC32.file('Rakefile').digest!.to_i.to_s(16)
=> "9e4a9a6"
hexdigest
मूल रूप से रिटर्न Digest.hexencode(digest)
, 012,330,। मुझे यकीन नहीं है कि यह फ़ंक्शन कैसे काम करता है, इसलिए मैं सोच रहा था कि Zlib.crc32
से वापस पूर्णांक के साथ इसे प्राप्त करना संभव है या नहीं। यह वास्तव में अपने प्रश्न का उत्तर नहीं है, लेकिन यह मदद कर सकता है ..
सबसे पहले, जब एक फ़ाइल में पढ़ने, सुनिश्चित करें कि आप "rb" पैरामीटर पारित कर
क्या माणिक मंच पर आप काम कर रहे हैं? – 2potatocakes
@ 2potatocakes, सी रूबी 1.9.3। –