2014-09-30 10 views
6

से पासवर्ड हैश को अपग्रेड करें, इसकी पहले यहां चर्चा की गई थी, लेकिन ऐसा कोई निष्कर्ष नहीं है।md5 से bcrypt

आदर्श रूप में, राज्य बनाए रखने के लिए नहीं करना चाहते हैं डेटाबेस में (उन्नत नहीं/अपग्रेड किया गया) आदि तो, यहाँ मैं क्या सोच रहा हूँ है:

MD5'd पासवर्ड bcrypt, और उपयोगकर्ता नाम का उपयोग "+ कुछ और "एक नमक के रूप में।

  1. क्या यह योजना कोई समझ में आती है?
  2. इसके अलावा, सामान्य रूप से नमक के हिस्से के रूप में उपयोगकर्ता नाम का उपयोग करना एक अच्छा विचार है? मैंने कहीं पढ़ा है कि प्रत्येक हैश में एक अलग नमक जोड़ने से यह अधिक सुरक्षित हो जाता है। क्या यह सही है (विशेष रूप से bcrypt के संदर्भ में)?
+0

कृपया डाउनवोट – merlinbeard

+4

को समझाएं यह [security.se] पर बेहतर होगा लेकिन पोस्ट करने से पहले उनके सहायता केंद्र की जांच करें। –

+0

'password_hash() 'http://php.net/manual/en/function.password-hash.php – timgavin

उत्तर

6

निश्चित रूप से एक और अधिक सुरक्षित हैश एल्गोरिदम पर स्विच करना एक अच्छा विचार है।

// Hash a new password for storing in the database. 
// The function automatically generates a cryptographically safe salt. 
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT); 

// Check if the hash of the entered login password, matches the stored hash. 
// The salt and the cost factor will be extracted from $existingHashFromDb. 
$isPasswordCorrect = password_verify($password, $existingHashFromDb); 
अपने जवाब से

मैं लगता है कि आप एक अनसाल्टेड MD5 मान का उपयोग किया है, तो डबल हैशिंग यहाँ एक अच्छा समाधान हो सकता है: वहाँ एक समारोह password_hash() आप एक BCrypt हैश बनाने के लिए उपयोग कर सकते हैं। बस MD5 हैश को password_hash() फ़ंक्शन पर पास करें, यह अपने आप पर एक सुरक्षित नमक उत्पन्न करेगा।

// Migrating the old MD5 hashes to MD5-BCrypt 
$hashToStoreInDb = password_hash($existingMd5Hash, PASSWORD_DEFAULT); 

सत्यापन के लिए पहले check for a double hash, और उसके बाद पासवर्ड सत्यापित करें।

if (checkIfDoubleHash($existingHashFromDb)) 
{ 
    $isPasswordCorrect = password_verify(MD5($password), $existingHashFromDb); 

    // Update database with pure BCrypt hash 
    if ($isPasswordCorrect) 
    $hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT); 
} 
else 
{ 
    $isPasswordCorrect = password_verify($password, $existingHashFromDb) 
} 

संग्रहीत हैश प्रमुख $ द्वारा या एक अलग db क्षेत्र द्वारा मान्यता प्राप्त किया जा सकता है, उदाहरण के लिए एक BCrypt हैश हमेशा एक $ चरित्र के साथ शुरू होता है, एक MD5 हैश नहीं करता है।

नमक अन्य पैरामीटर से वंचित नहीं होना चाहिए और यह प्रति पासवर्ड अद्वितीय होना चाहिए। Password_hash() फ़ंक्शन इसका ख्याल रखेगा। चूंकि एक इंद्रधनुष प्रत्येक नमक के सामने बनाया जाना चाहिए, इसलिए एक हमलावर को प्रत्येक पासवर्ड के लिए इंद्रधनुष बनाना होगा। अधिक जानकारी के लिए आप secure password storing के बारे में अपने ट्यूटोरियल को देख सकते हैं।

+0

यह उपयोगी है। धन्यवाद! – merlinbeard