2010-12-14 19 views
5

के साथ पासवर्ड सहेज रहा है मैं पोस्टग्रेस्क्ल, हाइबरनेट और जावा का उपयोग कर रहा हूं और मुझे पासवर्ड स्टोर करने की आवश्यकता है। क्या कोई मुझे बता सकता है कि एमडी 5 के साथ पासवर्ड कैसे एन्क्रिप्ट करना है। वरना वहाँ डेटाबेस में सुरक्षित पासवर्ड स्टोर करने के लिएएमडी 5

धन्यवाद

+0

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

+0

आप कम से कम अभी तक एमडी 5 द्वारा उत्पादित हैश मान "डिक्रिप्ट" नहीं कर सकते हैं। यदि आप कर सकते हैं, तो आप मूल रूप से इसे "तोड़" देंगे। एमडी 5 क्रिप्टोग्राफिक हैश फ़ंक्शंस में से एक है: http://en.wikipedia.org/wiki/Cryptographic_hash_function –

+3

*** पासवर्ड के लिए MD5 का उपयोग न करें! *** –

उत्तर

9

आप पासवर्ड हैशिंग के लिए md5 उपयोग नहीं करना चाहिए एक बेहतर तरीका है। यह गति के लिए बनाया गया है जो हमला करना आसान बनाता है। इसके बजाय bcrypt का उपयोग करें। साथ ही, आपको संग्रहीत होने के बाद पासवर्ड को डिक्रिप्ट करने का प्रयास नहीं करना चाहिए। उपयोगकर्ता इनपुट से पासवर्ड को सत्यापित करने के तरीके के लिए bcrypt पृष्ठ पर उदाहरण देखें। पासवर्ड को सुरक्षित रूप से स्टोर करने के तरीके पर information अधिक।

जेबीक्रिप्ट भी उपयोग करने के लिए असली सरल है।

BCrypt.hashpw(password_from_user, BCrypt.gensalt()); 

और यह सत्यापित करने के लिए: यहाँ कैसे आप एक पासवर्ड हैश है

BCrypt.checkpw(password_from_user, hashed_password_from_database) 
+1

क्या आप समझा सकते हैं कि एमडी 5 या शा 1 का उपयोग क्यों नहीं करते क्योंकि यह ऐसा करने का एक आम तरीका है? – JOTN

+0

अंतिम लिंक यह सब बताता है। – dagge

+0

यह केवल तब तक काम करता है जब तक कि कोई व्यक्ति पुराने यूनिक्स हैश एल्गोरिदम के साथ क्या हुआ, जैसे फास्टब्रीप्ट बनाता है। – JOTN

5

MD5 एक encryption algorithm नहीं है - यह एक cryptographic hash function है। यह बहुत अलग है! आप डेटाबेस में हैश किए गए पासवर्ड को स्टोर कर सकते हैं, लेकिन आप पासवर्ड के हैश से पासवर्ड पुनर्प्राप्त नहीं कर सकते हैं। यह डिज़ाइन द्वारा है। यदि पासवर्ड एक शब्दकोश शब्द यह एक dictionary attack का उपयोग कर बरामद किया जा सकता है उदाहरण के लिए -

कुछ मामलों में यह में हैश से वापस पासवर्ड प्राप्त करने के संभव है। यदि पासवर्ड पर्याप्त छोटा है और सीमित श्रेणी से वर्णों का उपयोग करता है तो brute force या rainbow table हमला पासवर्ड पुनर्प्राप्त कर सकता है। जब आप एक हैश पासवर्ड को स्टोर करते हैं तो आपको इन हमलों को और अधिक कठिन बनाने के लिए salt और key strengthening (उदाहरण के लिए PBKDF2) का उपयोग करना चाहिए।

आपको यह भी पता होना चाहिए कि एमडी 5 टूटा माना जाता है और इसे नए अनुप्रयोगों के लिए उपयोग न करने की अनुशंसा की जाती है। बेहतर विकल्प हैं, उदाहरण के लिए SHA-256

+0

सहमत हुए। मेरी राय में SHA-256 नमक + पासवर्ड 99.9% अनुप्रयोगों के लिए पर्याप्त होना चाहिए। – cherouvim

2

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

आप जावा में MessageDigest कक्षा का उपयोग कर सकते हैं। रेफरी: Get MD5 hash in a few lines of Java

संपादित करें: इसके अलावा, मैं उन लोगों से सहमत हूं जो अब इसके लिए MD5 का उपयोग न करने के लिए कह रहे हैं। यह एक पुराना एल्गोरिदम है जो आम था, लेकिन यह बेकारता (पासवर्ड के लिए) पर हमला किया गया है। एमडी 5 रिवर्स लुकअप के लिए ऑनलाइन संसाधनों के सभी प्रकार हैं।

0

यदि आप pgcrypto contrib मॉड्यूल स्थापित करते हैं तो आप इसे पोस्टग्रेज़ में कर सकते हैं।

फिर आप इस तरह पासवर्ड एन्क्रिप्ट कर सकते हैं:

update ... set passwordhash = crypt('new password', gen_salt('md5')); 

बेशक आप यह बिल्कुल डिक्रिप्ट नहीं कर सकता!

जैसा कि अन्य ने बताया है, यह एक बुरा विचार हो सकता है, जो आप करने की कोशिश कर रहे हैं उसके आधार पर। मुझे पहले एमडी 5 का उपयोग करने के लिए मजबूर किया गया है क्योंकि एक और आवेदन ने इसकी मांग की है, लेकिन आप दुनिया के लिए हैश प्रसारित नहीं करना चाहते हैं।

+1

मैं हाइबरनेट के साथ एक डीबीएमएस विशिष्ट समाधान का उपयोग करने की सिफारिश नहीं करता। डेटाबेस का उपयोग करने के लिए पोर्टेबिलिटी इसका उपयोग करने का एक बड़ा फायदा है। – JOTN

+0

@JOTN धन्यवाद, यह जानना दिलचस्प है। –

2

1) MD5 के लिए कोई डिक्रिप्ट नहीं है।
2) एमडी 5 पुरानी तकनीक है जो यह देखने के लिए उत्कृष्ट है कि दो तार समान हैं या नहीं।
3) MD5 शब्दकोश हमलों के अधीन है।
4) नमक का उपयोग करके एमडी 5 को और अधिक सुरक्षित बनाया जा सकता है।
5) हम निम्न स्तर की सुरक्षा के लिए एमडी 5 का उपयोग करते हैं क्योंकि हैश को प्लेटफॉर्म पर आसानी से डुप्लिकेट किया जा सकता है। (सी ++, vb.net, वीबी 6, सी #, PHP ...)

0

मुझे Jasypt एन्क्रिप्शन लाइब्रेरी काफी उपयोगी होने के लिए मिला है।

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