निश्चित रूप से एक और अधिक सुरक्षित हैश एल्गोरिदम पर स्विच करना एक अच्छा विचार है।
// 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 के बारे में अपने ट्यूटोरियल को देख सकते हैं।
कृपया डाउनवोट – merlinbeard
को समझाएं यह [security.se] पर बेहतर होगा लेकिन पोस्ट करने से पहले उनके सहायता केंद्र की जांच करें। –
'password_hash() 'http://php.net/manual/en/function.password-hash.php – timgavin