मैं वर्तमान में लॉगिन सिस्टम लागू कर रहा हूं। मैं डेटाबेस में पासवर्ड और नमक स्टोर करना चाहता हूं। अब मुझे पता चला है कि hash()
और crypt()
फ़ंक्शन ऐसा लगता है (SHA512 के लिए मान्य)।हैश() बनाम क्रिप्ट() फ़ंक्शन तुलना
hash()
नया है और crypt()
से अधिक हैशिंग एल्ग्रिथम का समर्थन करता है। या क्या कोई अन्य अंतर मुझे पता होना चाहिए/परवाह करना चाहिए?
संपादित करें:
function generatePasswordHash($password){
$salt = base64_encode(mcrypt_create_iv(8));
$calculatedPasswordHash = crypt($password, '$1$' . $salt . '$');
return $calculatedPasswordHash;
}
परिणाम लग रहा है $1$Qh6ByGJ9$zLn3yq62egvmc9D7SzA2u.
यहाँ अपना पासवर्ड चेकिंग समारोह की तरह:
function checkLoginData($username, $password){
global $db;
$sql = "SELECT * FROM users WHERE username = :username";
$result = $db->ExecuteQuery($sql, array("username"=>$username));
if(!empty($result)){
$result = $result[0];
$savedPasswordHash = $result['password'];
$splitted = explode("$", $savedPasswordHash);
$salt = $splitted[2];
$calculatedPasswordHash = crypt($password, '$1$' . $salt . '$');
if($savedPasswordHash === $calculatedPasswordHash){
return true;
}
}
return false;
}
@CodeInChaos: डेटाबेस से पासवर्ड हैश संग्रह और एक्सेस करना। दोनों नमक ले सकते हैं (concatenation के माध्यम से 'हैश()' के '$ डेटा' पैरामीटर में नमक जोड़ें)। – testing
बस कई मामलों में डेटा के लिए नमक को जोड़ना असुरक्षित है। ऐसा मत करो, जब तक आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं। यह भी * तेज़ * है और आप इसे * धीमा * होना चाहते हैं। – CodesInChaos
नया कोड पासवर्ड को एन्क्रिप्ट करने के बजाय पासवर्ड को एन्क्रिप्ट करता है। यानी यह मामूली रूप से उलटा हो सकता है। – CodesInChaos