2012-04-03 21 views
7

में बेस 64 पर हेक्साडेसिमल डाइजेस्ट को कनवर्ट करना मेरे पास एक फ़ाइल के लिए एमडी 5 हेक्स डाइजेस्ट का स्ट्रिंग प्रस्तुति है, जिसे मैं अपलोड करते समय सामग्री-एमडी 5 HTTP शीर्षलेख का उपयोग करने के लिए बेस 64 में कनवर्ट करना चाहता हूं। क्या निम्नलिखित से करने के लिए एक स्पष्ट या अधिक कुशल तंत्र है?रूबी

def hex_to_base64_digest(hexdigest) 
    [[hexdigest].pack("H*")].pack("m").strip 
end 

hex_digest = "65a8e27d8879283831b664bd8b7f0ad4" 
expected_base64_digest = "ZajifYh5KDgxtmS9i38K1A==" 

raise "Does not match" unless hex_to_base64_digest(hex_digest) === expected_base64_digest 
+0

मेरे लिए बहुत स्पष्ट और कुशल दिखता है, के लिए 0 गिनती निर्दिष्ट करके स्ट्रिप को सहेज सकते हैं। एकमात्र चीज जो तेज/स्पष्ट हो सकती है वह देशी हुक है जो वास्तव में "hex_to_base64_digest" विधि करता है। – maerics

उत्तर

17

मेरे लिए बहुत स्पष्ट और कुशल लगता है। आप 'एम' पैक प्रारूप (if count is 0, no line feed are added, see RFC 4648)

def hex_to_base64_digest(hexdigest) 
    [[hexdigest].pack("H*")].pack("m0") 
end 
+0

धन्यवाद, ऐसा लगता है कि यह मामला हो सकता है। बस लगता है कि सरणी में प्रत्येक पैरामीटर लपेटना बेकार है। – steveh7