2016-02-05 16 views
5

मेरे पास दो अनुप्रयोग हैं, एक लैरवेल 5.2 में से एक और उल्का में से एक है। मैं पासवर्ड के लिए हैश इकट्ठा करना चाहता हूं जो दोनों प्लेटफार्मों के अनुकूल हैं।लैरवेल और उल्का पासवर्ड हैशिंग

डेटाबेस Laravel के लिए अलग से

  • password हैश संग्रहीत करता है।
  • meteor_password उल्का के लिए।

दोनों प्लेटफॉर्म डिफ़ॉल्ट रूप से 10 राउंड के साथ bcrypt का उपयोग करते हैं, लेकिन उल्का bcrypt से पहले सादे पासवर्ड sha256 प्रतीत होता है।

उल्का पासवर्ड हैश abc बनाता है, मैं सादे पासवर्ड SHA256 सकते हैं, और Laravel के internals का उपयोग कर abc से इसकी तुलना करें, अर्थात Auth::attempt()

$sha256 = hash('sha256', $request->get('password'), false); 

यह काम करता है। Laravel सफलतापूर्वक उपयोगकर्ता को प्रमाणित करता है।

हालांकि, अगर मैं लार्वेल में एक नया उपयोगकर्ता पंजीकृत करता हूं, और हैश meteor_password स्टोर करता हूं, तो मेटर में उस हैश के खिलाफ प्रमाणीकरण करते समय, यह त्रुटि संदेश "लॉगिन निषिद्ध" में विफल रहता है। This error appears to be mean incorrect credentials.

मैं उसी तरह से हैश बना रहा हूं जैसा मैंने लारवेल में सत्यापित किया था।

$meteor_password = bcrypt(hash('sha256', $plain, false)); 

यह अजीब लगता है कि यह एक तरह से काम करेगा और दूसरा नहीं तो मुझे लगता है कि मुझे कुछ याद आ रही है।

उत्तर

3

2011 में, एक बग PHP के BCrypt कार्यान्वयन में की खोज की थी, इसलिए वे 2x और 2y, जो आज संकेत मिलता है कि पासवर्ड निश्चित संस्करण से टुकड़ों में बांटा गया था प्रयोग किया जाता है, के लिए मूल 2a संस्करण सूचक changed

इसलिए, PHP के 2y द्वारा उत्पन्न हैश को नोड के 2a द्वारा उत्पन्न किए गए एक के समान होना चाहिए।

एनपीएम मॉड्यूल (उल्का द्वारा उपयोग) द्वारा सही तरीके से संसाधित करने के लिए उपसर्ग को बदला जाना चाहिए, क्योंकि यह does not acknowledge 2y है।

$meteor_password = bcrypt(hash('sha256', $plain, false)); 
// replace it useing something like: 
$meteor_password = str_replace('$2y', '$2a', $meteor_password); 
// or 
$meteor_password[2] = 'a'; 
+0

स्पॉट ऑन, अपेक्षित काम करता है। लिंक के लिए धन्यवाद; दिलचस्प पढ़ता है। –

+0

ग्रेट। बीटीडब्ल्यू, "लागत" कारक घातीय है, इसलिए 10 की लागत वास्तव में, (2^10 =) 1024 राउंड, 10 नहीं है :) – MasterAM

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