2012-04-13 27 views
61

मैं डेटाबेस में एन्क्रिप्टेड पासवर्ड स्टोर करने के लिए has_secure_password का उपयोग करना चाहता हूं। यदि has_secure_password किसी भी प्रकार के नमक का उपयोग करता है तो मुझे इंटरनेट पर नहीं मिल रहा है। यदि यह नमक का उपयोग करता है, तो यह कैसे काम करता है? क्या कोई इसे मेरे लिए स्पष्ट कर सकता है?क्या है_secure_password किसी भी प्रकार के नमक का उपयोग करता है?

थिज़्स

उत्तर

79

has_secure_passwordbcrypt-ruby उपयोग करता है। bcrypt-ruby स्वचालित रूप से आपके लिए लवण की संग्रहण और उत्पादन को संभालता है। bcrypt-ruby से एक सामान्य हैश इस तरह दिखता है: $2a$10$4wXszTTd7ass8j5ZLpK/7.ywXXgDh7XPNmzfIWeZC1dMGpFghd92e। उदाहरण के हैश के लिए

def split_hash(h) 
    _, v, c, mash = h.split('$') 
    return v, c.to_i, h[0, 29].to_str, mash[-31, 31].to_str 
end 

इस समारोह की पैदावार:

  • संस्करण: 2 ए
  • लागत: 10
  • नमक: $ 2 ए $ 10 $ 4wXszTTd7ass8j5ZLpK इस हैश निम्नलिखित फ़ंक्शन का उपयोग आंतरिक रूप से विभाजित है/7।
  • हैश: ywXXgDh7XPNmzfIWeZC1dMGpFghd92e

==BCrypt::Password के समारोह नमक निकालता है और स्ट्रिंग पारित करने के लिए यह लागू होता है:

BCrypt::Password.create('bla') == 'bla' # => true 
+1

मैं मानना ​​था कि लेखक नमक के लिए एक अलग कॉलम के बारे में पूछ रहा था। इस नमक को नियंत्रित करने के लिए हमारे पास कोई रास्ता नहीं है, इसलिए उपयोगकर्ता के लिए यह हैश विस्तारक की तरह कार्य करता है - केवल 1 कॉलम समझौता करने से हमारे पासवर्ड को एक समय का मामला तोड़ देता है। – jdoe

+11

प्रश्न था 'क्या है_secure_password किसी भी प्रकार का नमक उपयोग करता है?', और यह करता है। मुझे लगता है कि ज्यादातर समय एक संपूर्ण डेटाबेस से समझौता किया जाता है, इसलिए अगर कोई अतिरिक्त कॉलम में नमक बचाया जाता है तो इससे कोई फर्क नहीं पड़ता है। हालांकि, आप सही हैं कि इस मामले में यह अधिक सुरक्षित है कि डेटाबेस के केवल एक कॉलम से समझौता किया गया है। – fabi

+0

हाय फैबी, उत्तर के लिए धन्यवाद, अगर आप सोचते हैं कि यह एक बड़े दर्शकों के लिए दिलचस्प/लागू है तो कृपया प्रश्न को ऊपर उठाएं। –