क्या मुझे bcrypt के साथ नमक को स्टोर करने की आवश्यकता है?


189

पासवर्ड एन्क्रिप्ट करने के तरीके के लिए bCrypt के javadoc में यह कोड है:

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

यह जांचने के लिए कि क्या सादा पासवर्ड एक से मेल खाता है, जो पहले हैशेड हो चुका है, चेकपॉव विधि का उपयोग करें:

if (BCrypt.checkpw(candidate_password, stored_hash))
    System.out.println("It matches");
else
    System.out.println("It does not match");

इन कोड स्निपेट का सीधा मतलब है कि बेतरतीब ढंग से उत्पन्न नमक को फेंक दिया जाता है। क्या यह मामला है, या यह सिर्फ एक भ्रामक कोड स्निपेट है?

जवाबों:


214

नमक को हैश में शामिल किया गया है (बेस 64-शैली प्रारूप में एन्कोडेड)।

उदाहरण के लिए, पारंपरिक यूनिक्स पासवर्ड में नमक को पासवर्ड के पहले दो अक्षरों के रूप में संग्रहीत किया गया था। शेष वर्ण हैश मान का प्रतिनिधित्व करते हैं। चेकर फ़ंक्शन यह जानता है, और नमक को वापस बाहर निकालने के लिए हैश को अलग करता है।


59
पासवर्ड में नमक शामिल है। तो आप नमक को बचाने के लिए नहीं है।
स्वप्निल मुखर्जी

2
उसके लिए धन्यवाद। काश, उन्होंने कहा कि जावदोक में :) (मैंने स्रोत को देखा और पुष्टि की - लेकिन मुझे नहीं पता था कि मैं पहले क्या देख रहा था)
RodeoClown

1
धन्यवाद - मैं यह भी पता लगाने की कोशिश कर रहा था! अब मैं सोच रहा हूं कि क्या यह एक अच्छा विचार है। क्या हैश में नमक रखने का एक फायदा / नुकसान यह है कि इसे अलग से स्टोर करना है?
एडम

8
@ एडम - जैसा कि नमक यादृच्छिक रूप से उत्पन्न होता है, इसका मतलब है कि आपको अपने डेटाबेस में दो चीजों को जोड़ने की एक विधि की आवश्यकता नहीं है।
रोडियोक्लब

मैंने स्रोत कोड पर एक नज़र डाली और पता लगाया कि हालांकि नमक तर्क के लिए JavaDoc "शायद BCrypt.gensalt का उपयोग करके उत्पन्न किया गया है", मैंने पाया कि आपको genSalt () विधि का उपयोग करना होगा या आपको अपवाद प्राप्त होंगे = /
the_new_mr
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.