2016-02-06 13 views
5

का उपयोग करके पासवर्ड एन्कोडिंग और डिकोडिंग मैं उपरोक्त उल्लेखनीय सॉफ़्टवेयर स्टैक का उपयोग करता हूं और मुझे डेटाबेस में सहेजने से पहले पासवर्ड एन्क्रिप्ट करना होगा। मुझे पासवर्ड को डिक्रिप्ट करने की भी आवश्यकता है क्योंकि जब कोई पासवर्ड बदल देगा तो उसे पुराने पासवर्ड में देना होगा और फिर नया ओएन दो बार और मुझे पुराना पासवर्ड जांचना होगा। मैंने बहुत कुछ खोजा है लेकिन मुझे अभी भी यकीन नहीं है कि ऐसा करने का सही तरीका क्या है। मुझे यह लिंक Encrypting मिला है लेकिन क्या ऐसा करने के लिए अन्य संकेत हैं? मुझे यह भी यकीन नहीं है कि शायद मोंगोडीबी पासवर्ड की सुरक्षा के लिए कुछ प्रदान करता है।स्प्रिंग सिक्योरिटी, स्प्रिंग बूट और मोंगोडीबी

उत्तर

18

प्रथम पासवर्ड हैशिंग के बारे में Steven Carlson´s answer पढ़ें।

अच्छी बात यह है कि वसंत सुरक्षा आपके लिए यह करेगी। स्प्रिंग सिक्योरिटी 3.2 ने नया org.springframework.security.crypto.password.PasswordEncoder इंटरफ़ेस और कुछ कार्यान्वयन प्रस्तुत किए: BCryptPasswordEncoder, StandardPasswordEncoder (और NoOpPasswordEncoder)।

महत्वपूर्ण: वर्ष के साथ भ्रमित न org.springframework.security.crypto.password.PasswordEncoder पदावनत org.springframework.security.authentication.encoding.PasswordEncoder

इंटरफेस (और इसलिए कार्यान्वयन) दो तरीकों है आप की जरूरत:

  • public String encode(CharSequence rawPassword)
  • public boolean matches(CharSequence rawPassword, String encodedPassword)

मैं org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder का उपयोग करने की सलाह देता हूं। BCryptPasswordEncoder (StandardPasswordEncoder के विपरीत) प्रत्येक पासवर्ड के लिए अलग नमक का उपयोग करें (लेकिन StandardPasswordEncoder से एक की तरह ग्लोबल नहीं)। जब आप कच्चे पासवर्ड को एन्कोड करते हैं (public String encode(CharSequence rawPassword)) तो लौटाए गए एन्कोडेड पासवर्ड केवल एन्कोडेड पासवर्ड नहीं है, इसमें उपयोग किए गए हैश-एल्गोरिदम, उपयोग किए गए नमक और निश्चित रूप से एन्कोडेड पासवर्ड के बारे में कुछ मेटा जानकारी भी शामिल है।

+0

वसंत जानकारी जोड़ने के लिए धन्यवाद क्योंकि मैं उस उत्पाद से परिचित नहीं हूं :) –

+0

जैसा कि आपने उल्लेख किया है, मेटा जानकारी कैसे प्राप्त कर सकता हूं, उदाहरण के लिए इस्तेमाल नमक? – charle819

+0

'BCryptPasswordEncoder' के मामले में, मेटा जानकारी केवल नमक है: 'BCrypt.hashpw (स्ट्रिंग पासवर्ड, स्ट्रिंग नमक) पर एक नज़र डालें। 'नमक' नामक पैरामीटर क्रिप्टेड पुराना पासवर्ड है। और उस विधि में कोड पासवर्ड से नमक "पढ़ा" – Ralph

16

आपको पासवर्ड को "एन्क्रिप्ट करना" नहीं होना चाहिए। मुझे पता है कि यह काउंटर-अंतर्ज्ञानी लगता है। लेकिन शून्य कारण है कि आपको सिस्टम को पासवर्ड डिक्रिप्ट करने की आवश्यकता होनी चाहिए। ऐसा करने के लिए आपके डेटाबेस को हैकर में खुल जाएगा, क्योंकि यदि आप अपने कोड/सर्वर में अपना डिक्रिप्शन पासवर्ड स्टोर करते हैं तो हैकर उस जानकारी को चुरा सकता है।

सही प्रक्रिया hash पासवर्ड है। एक हैश एक तरफा है (मूल पाठ पर वापस विचलित नहीं किया जा सकता है) प्रक्रिया। वर्तमान मानक SHA256 का उपयोग अपने पासवर्ड हैश करने के लिए होगा। यहां एक मूल प्रवाह-चार्ट है:

  1. उपयोगकर्ता सबमिट पासवर्ड लें। उदाहरण पासवर्ड "माइपास" हैश ea71c25a7a602246b4c39824b855678894a96f43bb9b71319c39700a1e045222
  2. अपने डेटाबेस में इस हैश (ea71c25a7a602246b4c39824b855678894a96f43bb9b71319c39700a1e045222) को स्टोर करें।

जब कोई उपयोगकर्ता आपके द्वारा लॉग इन करता है तो वह पासवर्ड लेता है जिसे उसने अभी सबमिट किया है और हैश। यदि वह एक ही पासवर्ड में प्रवेश करता है तो यह आपके डेटाबेस में एक ही मूल्य के लिए हैश हो जाएगा।

जब कोई उपयोगकर्ता पासवर्ड बदलने के लिए जाता है तो पुराने पासवर्ड को अभी भी सत्यापित करने के लिए "अपना पुराना पासवर्ड दर्ज करें" है, अगर यह आपके "नया पासवर्ड दर्ज करें" है और इसे सहेजता है।

एक बात जो मैंने अपने उदाहरण में उल्लेख नहीं की है salt है। यह कुछ ऐसा है जो आपको अपने सिस्टम में उपयोग करना चाहिए क्योंकि यह आपके डेटा को rainbow table शोषण से सुरक्षित करता है। लेकिन यह एक और चर्चा के लिए है।

आशा इस मदद करता है :)

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