2009-07-02 12 views
17

डेटा एक्सेस परत में स्प्रिंग & हाइबरनेट (जेपीए) के साथ एक जावा अनुप्रयोग ढेर में, पासवर्ड एन्क्रिप्शन को लागू करने (उम्मीद एनोटेशन का उपयोग) के अच्छे तरीकों क्या कर रहे हैं, और जहां यह किया जा रहा है (ट्यूटोरियल, आदि के बारे में और अधिक जानकारी प्राप्त कर सकते हैं)?वसंत/हाइबरनेट के साथ पासवर्ड एन्क्रिप्शन - जैसीप्ट या कुछ और?

यह समझा जाता है कि मैं पासवर्ड को एन्क्रिप्ट करने के लिए JCA समर्थित एल्गोरिदम का उपयोग करूंगा, लेकिन अगर कोई आसान तरीका है तो मैं रैपर तर्क को लागू नहीं करना चाहूंगा।

मैं) Jasypt देख रहा था, और एक था सोच रहा था कि अगर एक अच्छा विकल्प है और कैसे यह करने के लिए है और ख) और क्या लोगों को इस के लिए उपयोग कर रहे हैं। यदि कोई जैसीप्ट या वैकल्पिक विकल्प का उपयोग कर रहा है, तो आपके अनुभव का विवरण यह बहुत अच्छा होगा।

+0

पर इसे पा सकते हैं मैं हमेशा पासवर्ड के हैश संग्रहीत किया है वास्तविक पासवर्ड की बजाय। इस तरह आप इसे अभी भी सत्यापित कर सकते हैं, लेकिन आपके पास इसे संग्रहीत करने की कोई ज़िम्मेदारी नहीं है। – Jesse

+1

ठीक है, यह वही है जो मैं करना चाहता हूं - बस एक लाइब्रेरी खोजने की कोशिश कर रहा है जो हैरिंग + ओआरएम परत पर पूछताछ के साथ मदद करेगा। – stevedbrown

उत्तर

7

जावा में आपके लिए पहले से आवश्यक सभी आवश्यक पुस्तकालय हैं। बस एक उपयोगिता विधि बनाएं जो OWASP पर वर्णित नमक के साथ हैशिंग लागू करती है।

तुम सच है कि कोड ही नहीं करना चाहते हैं और एक अतिरिक्त निर्भरता कोई आपत्ति नहीं है, ऐसा लगता है कि Shiro पुस्तकालय (पूर्व JSecurity) क्या OWASP द्वारा वर्णित है की एक implementation है।

यह भी JASYPT पुस्तकालय आप का उल्लेख की तरह दिखता है एक similar utility है।

मुझे एहसास है कि इस उत्तर में वसंत या हाइबरनेट का उल्लेख नहीं है लेकिन मैं स्पष्ट नहीं हूं कि आप इस परिदृश्य में उनका उपयोग कैसे कर रहे हैं।

0

मैं सिर्फ SHA-256(username + ":" + password + ":" + salt) को कुछ इसी तरह का उपयोग करें और एक 64-चरित्र पासवर्ड बुलाया स्तंभ में डेटाबेस में संग्रहीत।

विकिपीडिया का कहना है कि नमक से संबंधित: "नमक डेटा डिक्शनरी हमलों को जटिल करता है जो शब्दकोश प्रविष्टियों के पूर्व-एन्क्रिप्शन का उपयोग करते हैं: प्रत्येक नमक का उपयोग भंडारण और गणना की मात्रा को दोगुना करता है। ... सर्वोत्तम सुरक्षा के लिए, नमक मूल्य पासवर्ड डेटाबेस से अलग गुप्त रखा जाता है। यह एक लाभ प्रदान करता है जब डेटाबेस चोरी हो जाता है, लेकिन नमक नहीं है। "

तो प्रमाणित करने के लिए, आपूर्ति उपयोगकर्ता नाम के साथ डेटाबेस से उपयोगकर्ता मिलता है, तो एक ही हैश उनके लॉगिन प्रयास के माध्यम से प्रदान पासवर्ड का उपयोग करते हैं, और डेटाबेस में है कि करने के लिए की तुलना करें। लॉगिन प्रयासों के लिए सीमित कुछ दर में भी जोड़ें (उदा। 5 प्रति 5 मिनट की अवधि)। यदि उपयोगकर्ता अपना पासवर्ड भूल जाता है, तो उन्हें कभी भी पासवर्ड ईमेल न करें (जैसा कि आपने इसे संग्रहीत नहीं किया होगा), न ही उन्हें एक नया जेनरेट किया गया पासवर्ड ईमेल करें, लेकिन उन्हें उस पासवर्ड को बदलने के लिए एक लिंक पासवर्ड कुंजी/नॉन/नमक के साथ एक लिंक ईमेल करें यूआरएल जिसे आप जांच सकते हैं।

+0

मैंने अपना प्रश्न संपादित किया - मैं एल्गोरिदम की तलाश नहीं कर रहा था, लेकिन स्प्रिंग/हाइबरनेट स्टैक के साथ जेसीए एल्गोरिदम का उपयोग करने के लिए एक मानक (यानी लाइब्रेरी लागू) तरीका के लिए। – stevedbrown

+1

तो क्या आप वास्तव में अपने उपयोगकर्ता खाता मॉडल में किसी क्षेत्र पर @Password("SHA-256") एनोटेशन जैसे कुछ और पृष्ठभूमि में सत्यापन को स्वचालित रूप से संभालने के लिए अपने ढांचे के लिए चाहते हैं? किसी बिंदु पर आप कार्यक्षमता के मामले में एक लचीलापन और लचीलापन बलिदान देने के लिए एक ढांचा पूछना शुरू करते हैं। – JeeBee

2

एमडी 5 या एसएचए -256 ठीक होगा, हालांकि एमडी 5 अब क्रैक करने योग्य है।

शायद मैंने समस्या को गलत समझा, लेकिन यह सिर्फ हैश किए गए पासवर्ड की तुलना करना चाहिए।

हाइबरनेट में, बस एक स्ट्रिंग के रूप में स्टोर करें। सत्यापन पक्ष पर, एक विधि है:

public validate(String user, String pass) 
{ 
    if(getUser(user).getPass().equals(getHash(pass))) 
     return true; 
    return false; 
} 
+1

वही टिप्पणी, मैं उपयोग करने के लिए एक आर्किटेक्चर या एल्गोरिदम की तलाश नहीं कर रहा था - बस लोग वास्तव में इसे कैसे करते हैं। – stevedbrown

+0

क्या आप और अधिक देख रहे हैं? http://www.evolt.org/node/60122 – Jesse

+0

यह बताता है कि मैं अब क्या कर रहा हूं - मैं सोच रहा था कि हाइबरनेट गुणों को एनोटेट करने का कोई तरीका है या कुछ ऐसा करने के लिए कुछ है। क्लीनर लगता है। – stevedbrown

5

आप Jasypt with Hibernate का उपयोग मक्खी पर एन्क्रिप्ट या हैश करने के लिए अपने गुण thats क्या आप के लिए देख रहे हैं कर सकते हैं। कंप्यूटिंग डाइजेस्ट्स (हैश) के लिए वास्तविक एल्गोरिदम जेसीई का उपयोग करके बहुत आसान है यदि आप अपना खुद का रोल करना चाहते हैं।

+0

मुझे नहीं लगता कि हाइबरनेट दृष्टिकोण के साथ जेएएसवाईपीटी पासवर्ड के लिए आदर्श है क्योंकि मूल्य को डिक्रिप्ट करना संभव है। पासवर्ड एक तरफा डाइजेस्ट के साथ सुरक्षा होना चाहिए। – laz

+0

जेएसवाईपीटी इसका समर्थन करता है - http://www.jasypt.org/howtoencryptuserpasswords.html। – stevedbrown

+0

मैंने देखा कि, लेकिन ऐसा प्रतीत नहीं होता है कि वे प्रदान करते हैं कि हाइबरनेट एकीकरण इसका लाभ उठाता है। हाइबरनेट एकीकरण केवल एन्क्रिप्टिंग/डिक्रिप्टिंग के लिए है, एक तरफा पचाने वाला नहीं। – laz

2

वहाँ Jasypt साथ यह करने के लिए एक हाइबरनेट विशिष्ट तरीका हो प्रतीत नहीं होता है, लेकिन आप वसंत में एक पासवर्ड encryptor सेट कर सकते हैं:

<!-- 
    Set up string digester here so we can configure it for more pools if it's a problem... 
    --> 
    <bean id="stringDigester" class="org.jasypt.digest.PooledStringDigester"> 
    <!-- same settings as StrongPasswordGenerator --> 
    <property name="poolSize" value="2"/> 
    <property name="algorithm" value="SHA-256"/> 
    <property name="iterations" value="100000"/> 
    <property name="saltGenerator"> 
     <bean class="org.jasypt.salt.RandomSaltGenerator"/> 
    </property> 
    <property name="saltSizeBytes" value="16"/> 
    </bean> 

    <!-- ...and then we only have to deal with the passwordEncryptor interface in code. --> 
    <bean id="passwordEncryptor" class="com.myproject.util.StringPasswordEncryptor"> 
    <property name="stringDigester" ref="stringDigester"/> 
    </bean> 

उसके बाद, आप context.getBean फोन ("passwordEncryptor ") एन्क्रिप्टर प्राप्त करने के लिए, और उसके बाद या तो एन्क्रिप्टपैसवर्ड() या checkPassword() को कॉल करें।

2

आप अपने आवेदन में वसंत का उपयोग कर रहे हैं, तो आप भी Spring Security, जो आप कई पासवर्ड एनकोडर के साथ प्रदान करता है, का उपयोग कर सकते यानी ShaPasswordEncoder आप StackOverflow

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