2016-12-14 5 views
7

मैं पासवर्ड सुरक्षित करने के लिए php crypt फ़ंक्शन का उपयोग कर रहा हूं, लेकिन जब मैं डेटाबेस में किसी एक में दर्ज पासवर्ड की कोशिश करता हूं और तुलना करता हूं तो यह काम नहीं करेगा।मैं अपने डेटाबेस से पासवर्ड की तुलना नहीं कर सकता और एक इनपुट

$crypt_password = crypt($_POST['confirm-password']); 
यहाँ

मुझे एक और समारोह में पासवर्ड से तुलना करने की कोशिश कर रहा है::

$input_crypt_password = crypt($_POST['input-pw']); 

if ($input_crypt_password == $dbpassword){ 
    // do change password function 
} 

यह काम नहीं कर रहा

यहाँ पहली जगह में पासवर्ड बनाने के लिए मेरी कोड है।

जब मैं दोनों पासवर्ड प्रिंट करता हूं तो अलग-अलग होते हैं।

पासवर्ड अलग क्यों हैं, भले ही मैं एक ही पासवर्ड दर्ज कर रहा हूं और दोनों पर क्रिप्ट फ़ंक्शन का उपयोग कर रहा हूं?

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

+3

कृपया आपके द्वारा उपयोग किए जाने वाले फ़ंक्शन के बारे में दस्तावेज़ पढ़ें। यह आपके प्रश्न का उत्तर देगा। – arkascha

+1

त्वरित संदर्भ: 'हैशिंग के आधार पर एक वैकल्पिक नमक स्ट्रिंग। यदि प्रदान नहीं किया गया है, तो व्यवहार को एल्गोरिदम कार्यान्वयन द्वारा परिभाषित किया गया है और अप्रत्याशित परिणाम हो सकता है। – bansi

+4

अधिक सुरक्षित पासवर्ड_शैश() - https://secure.php.net/manual/en/function.password-hash का उपयोग करने पर विचार करें। php –

उत्तर

1

मैं कहना क्या है कि क्या हर किसी को पहले से ही कहा है की तुलना में अधिक विस्तार से जोड़ना होगा पता नहीं है ...

तो, आधुनिक दिन हैश/unhashing एल्गोरिदम में यह मानक हैशिंग का उपयोग कर पासवर्ड स्टोर करने के लिए असुरक्षित हो सकता है फ़ंक्शन (जैसे MD5/SHA256) क्योंकि यह इस प्रकार की प्रविष्टि को खोलने के लिए तेज़ और आसान है।

password_hash() अन्य उत्तर और टिप्पणियों में संदर्भित के रूप में आप कर रहे हैं # 1 तरीका सुरक्षित रूप से पासवर्ड स्टोर करने के लिए के रूप में यह एक एक ही रास्ता हैशिंग एल्गोरिथ्म का उपयोग करता है होना चाहिए।

You should read this page!

और फिर अपने मूल प्रश्न के जवाब में, पासवर्ड तुलना करने के लिए hash_equals() समारोह का उपयोग करें।

6

सीधे पासवर्ड के लिए crypt का उपयोग न करें।

यदि आपके पास password_hash फ़ंक्शन में निर्मित उपयोग से PHP 5.5+ है, अन्यथा यदि आपके पास PHP 5.3.7+ है, तो इस फ़ंक्शन के लिए polyfill का उपयोग करें।

13
the docs

उदाहरण # 1 तहखाने() उदाहरण

<?php 
$hashed_password = crypt('mypassword'); // let the salt be automatically generated 

/* You should pass the entire results of crypt() as the salt for comparing a 
    password, to avoid problems when different hashing algorithms are used. (As 
    it says above, standard DES-based password hashing uses a 2-character salt, 
    but MD5-based hashing uses 12.) */ 
if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) { 
    echo "Password verified!"; 
} 
?> 

से

सवाल को प्रभावी ढंग से हर बार यह कहा जाता है एक नया हैश उत्पन्न होगा में कोड - मौजूदा पासवर्ड हैश करने की जरूरत है लगातार परिणाम प्राप्त करने के लिए नमक के रूप में पारित किया जाना चाहिए।

के रूप में भी डॉक्स में उल्लेख किया है:

password_hash की

उपयोग करें() प्रोत्साहित किया जाता है।

मैं आगे जाकर आप निश्चित रूप से (यह मानते हुए php> = 5.5) के बजाय password_hash का उपयोग करना चाहिए पासवर्ड के उपयोग के लिए crypt बुलाने की कहेंगे; किसी भी मामले में हालांकि जो भी उपकरण/विधियों का आप उपयोग कर रहे हैं - कृपया उन्हें जानने के लिए दस्तावेज़ों को पढ़ें।

+0

की तुलना करने से पहले एक निम्नतम अनुशंसित पासवर्ड एल्गोरिदम के लिए ऊपर की संपूर्ण जटिलताओं को सीखें या मैन्युअल द्वारा अनुशंसित पासवर्ड पासवर्ड_शैश का उपयोग करें। – bansi

+1

@bansi 'password_hash() एक साधारण क्रिप्ट() रैपर है और मौजूदा पासवर्ड हैश के साथ संगत है। Password_hash() का उपयोग प्रोत्साहित किया जाता है। 'मैं _also_ 'password_hash' के उपयोग को प्रोत्साहित करता हूं लेकिन प्रश्न में त्रुटि" गलत फ़ंक्शन का उपयोग नहीं "है, यह" फ़ंक्शन का उपयोग करके, गलत "है - या बस दस्तावेज़ों को नहीं पढ़ रहा है। – AD7six

2

इस तरह कुछ करने का प्रयास करें।

$crypt_password = crypt($_POST['confirm-password'],salt); 

$input_crypt_password = crypt($_POST['input-pw'],salt); 

if ($input_crypt_password == $dbpassword){ 
    // do change password function 
    echo "Password match successfully!"; 
} 

हैशिंग के आधार पर salt पैरामीटर। यदि प्रदान नहीं किया गया है, तो व्यवहार को एल्गोरिदम कार्यान्वयन द्वारा परिभाषित किया गया है और अप्रत्याशित परिणामों का कारण बन सकता है।

+1

आप शायद '$ नमक' का मतलब है, जब तक कि 'नमक' को निरंतर परिभाषित न किया जाए ... – Leith

0

जैसा कि यहां कई लोगों ने कहा है, आपको password_hash php फ़ंक्शन का उपयोग करना चाहिए।

यहाँ आप एक सरल उदाहरण देख सकते हैं कि यह कैसे उपयोग करने के लिए:

<?php 

$password = '123456'; 
$userInput = '123456'; 

$storedHash = password_hash($password, PASSWORD_DEFAULT); 

if (password_verify($userInput, $storedHash)) { 
    echo 'OK'; 
} else { 
    echo 'ERROR'; 
} 

के रूप में भी, कि पहले उल्लेख किया है, तो आप PHP के पुराने संस्करण का उपयोग करें, आप polyfill स्थापित कर सकते हैं।

0

क्या आपने डीबी में बचत करने और तुलना करने से पहले इनपुट को ट्रिम किया था। चूंकि ब्राउज़र ब्राउज़र से आ रहा है, इसलिए यह एक कारण हो सकता है कि यह मेल नहीं खा रहा है। अन्यथा यह https://stackoverflow.com/a/41141338/1748066 उचित लगता है।

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

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