2013-02-13 14 views
7

तो मैं नया PHP 5.5 पासवर्ड हैशिंग एपीआई का उपयोग कर रहा हूं, और मुझे यकीन नहीं है कि मुझे यह सही तरीके से मिला है या नहीं।पासवर्ड हैशिंग एपीआई क्वेरी

मैंने प्रत्येक लॉगिन को स्वचालित रूप से रीहाश करने का प्रयास किया है और कभी-कभी मैं असफल रहता हूं, भले ही हैशिंग वही हो, वैसे भी, मुझे लगता है कि मैं कुछ गलत कर रहा हूं।

यह क्वेरी फ़ंक्शन हो सकता है कि मुझे शायद गलत हो गया है, क्योंकि जब मैं phpMyAdmin की जांच करता हूं तो हैश भी परिवर्तित नहीं होता है।

if (password_needs_rehash($result_row->user_password_hash, PASSWORD_DEFAULT)) 
{ 
    $newhash = password_hash(
     $_POST['user_password'], PASSWORD_BCRYPT, 
     ['cost' => 12, 'salt' => 'superfreakingsonicdude',] 
    ); 

    // update hash in database 
    $this->connection->query(
     "UPDATE users SET user_password_hash='" . $newhash . 
     "' WHERE user_name='".$result_row->user_name."'" 
    ); 
} 

Here is where you can find all the functions.

+0

जहां तक ​​मैं कह सकता हूं, आप जांच कर रहे हैं कि यह 'PASSWORD_DEFAULT' द्वारा धोया गया है, और यदि ऐसा नहीं है, तो आप 'PASSWORD_BCRYPT' का उपयोग करके हैश को सहेज लेंगे। यदि वे समान नहीं हैं (उदाहरण के लिए, यदि PHP के नए संस्करण को 'PASSWORD_DEFAULT'' को PASSWORD_ROT13' पर सेट किया गया है), तो आप पासवर्ड को फिर से हटा देंगे क्योंकि यह कभी भी 'PASSWORD_DEFAULT' का उपयोग करके धोया नहीं गया है। –

+0

(संक्षेप में, 'PASSWORD_DEFAULT' _or_ 'PASSWORD_BCRYPT' का उपयोग करें, उन्हें मिश्रण न करें) –

+0

मुझे एहसास हुआ कि मूल हैश बीसीआरईपीटी था इसलिए मुझे इसे सेट करने की आवश्यकता है। मुख्य समस्या यह है कि हैश इस पर ध्यान नहीं देता है। –

उत्तर

3

इनपुट हैश करने के लिए पासवर्ड और नमक है। वही पासवर्ड, एक ही नमक, एक ही परिणाम।
यदि आप salt पैरामीटर बाहर छोड़ते हैं, तो हर बार एक यादृच्छिक नमक उत्पन्न किया जाएगा और आपको एक अलग परिणाम मिलना चाहिए। आपको स्थिर नमक नहीं देना चाहिए। इसका मतलब है कि सभी उपयोगकर्ताओं के पास एक ही नमक होता है, जो इसकी प्रभावशीलता को बहुत कम करता है। प्रत्येक व्यक्ति हैश की आवश्यकता में यादृच्छिक नमक होना चाहिए।

+0

लेकिन समस्या यह है कि जब मैं एक रिहाश पूछने की कोशिश करता हूं तो मुझे एक अलग पीढ़ी नहीं मिल रही है। –

+0

लिंक: [यहां वह जगह है जहां आप सभी कार्यों को पा सकते हैं।] (Https://github.com/MrXXIV/PHP-5.5-login/blob/master/app/Login/Classes/login.class.php) –

4

funcion password_needs_rehash जाँच करने के लिए शुरू किया गया है अगर आप अपग्रेड करने की आवश्यकता:

password_needs_rehash($result_row->user_password_hash, PASSWORD_DEFAULT) 

यह फ़ंक्शन जांच की आपूर्ति की हैश प्रदान की एल्गोरिथ्म और विकल्पों को लागू करता है या नहीं। यदि नहीं, तो यह माना जाता है कि हैश को फिर से चलाने की जरूरत है।

यदि आपको यह समझने में समस्याएं हैं कि यह फ़ंक्शन क्या करता है, तो आरएफसी में PHP कोड में फ़ंक्शन शामिल है। तो अगर आप PHP कोड को पढ़ सकता है, तो आप को पढ़ने के लिए सक्षम होना चाहिए निम्नलिखित (भाग के रूप में पेश यह उपयोगकर्ता के देश में से लागू किया जा सकता देखें:): https://wiki.php.net/rfc/password_hash#password_needs_rehash

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

अभी PASSWORD_DEFAULTPASSWORD_BCRYPT है इसलिए इसे हमेशा झूठी वापसी करनी चाहिए। आपके मामले में यह सच हो जाता है, क्योंकि आप अपने पासवर्ड विकल्पों के बिना परीक्षण कर रहे हैं।

बदलें कि और आप ठीक होना चाहिए:

$options = ['cost' => 12, 'salt' => 'superfreakingsonicdude',]; 
######## 

if (password_needs_rehash($result_row->user_password_hash, PASSWORD_DEFAULT, $options)) 
                      ######## 
{ 
    $newhash = password_hash($_POST['user_password'], PASSWORD_DEFAULT, $options); 
                 ################ ######## 

    // update hash in database 
    $this->connection->query(
     "UPDATE users SET user_password_hash='" . $newhash . 
      "' WHERE user_name='".$result_row->user_name."'" 
    ); 
} 

इसके अलावा PASSWORD_DEFAULT उपयोग करने के लिए यदि आप एक डिफ़ॉल्ट PHP में कोर में algo अद्यतन hashing से लाभ उठाना चाहते जारी रखने के लिए विचार करें।

+0

user_password_hash अभी भी नहीं बदलता है। जब तक कि रिहाश फ़ंक्शन पर प्रतिक्रिया करने के लिए इसे नमक को उत्पन्न करने की आवश्यकता नहीं होती है? –

+0

'user_password_hash()' वापसी मान तब तक नहीं बदलेगा जब तक आप उन तीन पैरामीटर (कम से कम एक) में परिवर्तित नहीं होते हैं: 1.) सादा (पासवर्ड), 2.) * कंक्रीट * algo ('PASSWORD_DEFAULT' है समय के साथ ठोस नहीं) और 3.) विकल्प। जब तक इनमें से कोई भी परिवर्तन नहीं होता है, तब तक हैश वही होगा (जिस तरह से हैश फ़ंक्शन की विशिष्ट प्रकृति है)। – hakre

+0

आह ठीक है! जब भी व्यक्ति इसे तब तक लॉग इन कर सकता है जब तक कि जब भी इसे पढ़ा जा सके, तब तक पूरे हश में बदलाव होने की उम्मीद थी, लेकिन मुझे लगता है कि इसका कोई मतलब नहीं होगा। –

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