2012-07-09 12 views
6

संभव डुप्लिकेट:
Secure hash and salt for PHP passwordsका उपयोग कर md5 सुरक्षित भी इसकी और अधिक कठिन

मैं किसी को इस तरह एक पासवर्ड हैश कोडिंग देखा,

md5(uniqid(mt_rand('password', 15), true)); 

है कि एक सुरक्षित रास्ता यह करने के लिए? क्या यह भी काम करता है?

+8

पासवर्ड धोने के बाद वे पासवर्ड कैसे सत्यापित करते हैं?इसके अलावा 'mt_rand' अपने पैरामीटर के रूप में चींटियों को लेता है, स्ट्रिंग नहीं। –

+1

आह, @ रॉकेट क्या सवाल है ?? !!! – Engineer

+0

व्यक्तिगत रूप से मैं [phpass] (http://www.openwall.com/phpass/) का उपयोग करता हूं। –

उत्तर

6

न केवल सुरक्षित है, यह भी काम नहीं करता है।

mt_rand 2 पैरामीटर, एक न्यूनतम मूल्य और अधिकतम मूल्य लेता है।

mt_rand('password', 15) 

यह एक पूर्णांक (0) को 'password' बदल देता है, तो 0 और 15 के बीच एक यादृच्छिक संख्या देता है।

uniqid(mt_rand('password', 15), true) 

यह तो एक अद्वितीय ID उत्पन्न करता है, और यह करने के लिए पिछले चरण से यादृच्छिक संख्या पहले जोड़ता:

144ffb22886d58e1.82100749 

कि स्ट्रिंग तो md5'd है: कुछ इस तरह की गणना।

जैसा कि आप देख सकते हैं, यह कोड 100% बेकार है। मूल पासवर्ड 0 में परिवर्तित हो गया है और हमेशा के लिए खो गया है, तो आप जो भी कर रहे हैं वह यादृच्छिक संख्या है, जो व्यर्थ है। अब जब आपके पास हैश है, तो इसे फिर से सत्यापित करने का कोई तरीका नहीं है। चूंकि पासवर्ड परिवर्तित हो जाता है, जो भी उपयोगकर्ता प्रवेश करता है इससे कोई फर्क नहीं पड़ता।

तो, नहीं, यह कोड सुरक्षित नहीं है, इसका उपयोग न करें।

व्यक्तिगत रूप से, मैं phpass library का उपयोग करता हूं। यह सुरक्षित, और उपयोग करने में आसान है।

+0

आइए कहें कि अगर मैं 'mt_rand()' के बिना इसका उपयोग करता हूं, 'md5 (uniqid (' passwrd ', true)); क्या यह बेहतर है? – itsme

+0

@itsme: इसके साथ समस्या यह है कि आप बाद में पासवर्ड कैसे सत्यापित करते हैं? आपको बाद में उसी हैश उत्पन्न करने में सक्षम होना चाहिए, और आप इसे 'uniqid' के साथ नहीं कर सकते हैं। ['uniqid'] (http://php.net/manual/en/function.uniqid.php) पासवर्ड के लिए नहीं है, यह अद्वितीय आईडी उत्पन्न करने के लिए है (जैसे UUIDs)। –

+1

क्यों -1? इस जवाब में क्या गलत है? –

2

ईमानदार होने के लिए मैं पासवर्ड संग्रहित करने के लिए md5 को हैशिंग एल्गोरिदम के रूप में भी उपयोग नहीं करता। मैं bcrypt की तरह कुछ उपयोग करने के लिए देखता हूँ। इसके अलावा मुझे यह भी नहीं पता कि आपका उदाहरण कैसे काम करेगा, लेकिन किसी भी मामले में यदि आप इसे सुरक्षित करना चाहते हैं तो न्यूनतम से md5, sha1 से दूर रहें और अन्य गलतियों से सीखें और नमक का उपयोग करें।

+0

मुझे लगता है कि यदि आप एक अच्छा नमक का उपयोग करते हैं तो एमडी 5 सुरक्षित हो सकता है, लेकिन मैं मानता हूं कि नए एल्गोरिदम जाने का रास्ता हैं। –

+1

@ रॉकेट यदि आप नमक के साथ पासवर्ड हैश के लिए md5() का उपयोग करते हैं तो यह सुरक्षित नहीं है – PeeHaa

+0

एमडी 5 प्रदर्शन के संदर्भ में सुपर अनुकूलित किया गया है और इस प्रकार कुछ मामलों में यह अभी भी बलपूर्वक बलपूर्वक संभव है, लेकिन मैं अभी भी नहीं पासवर्ड हैशिंग के सुरक्षित कार्यान्वयन के लिए एमडी 5 की सिफारिश करें। – sean

11

नहीं, यह एक सुरक्षित तरीका नहीं है। यह क्रैक करने योग्य है और, आपके उदाहरण में, यह दोहराने योग्य नहीं है। आपको यादृच्छिक मूल्य को हैश के साथ लंबे समय तक स्टोर करना होगा। यदि वें डीबी से समझौता किया गया है, तो हैश को मजबूती देने के लिए यह बेहद आसान हो जाता है।

आपको पता होना चाहिए कि एमडी 5 और एसएचए 1 सबसे कमजोर हैशिंग एल्गोरिदम हैं, जो PHP में उपलब्ध हैं।

या PBKDF2 के साथ crypt() फ़ंक्शन का उपयोग करना बेहतर है।

अद्यतन

इसके अलावा, जैसा PeeHaa उल्लेख किया है, यह काम नहीं करता। mt_rand('password', 15)Warning: mt_rand() expects parameter 1 to be long, string given on line X का कारण बन जाएगा।

+0

@PeeHaa, ठीक है, हाँ, क्योंकि यह दोहराने योग्य नहीं है। –

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