hash yii CPasswordHelper: हैश पासवर्ड और सत्यापन पासवर्ड




passwords salt (2)

मुझे लगता है कि मुझे यहाँ कुछ महत्वपूर्ण याद आ रही है। CPasswordHelper::hashPassword फ़ंक्शन में हमारे पास लाइन हैं:

$salt=self::generateSalt($cost);  
$hash=crypt($password,$salt);  

return $hash;

और CPasswordHelper::verifyPassword में यह रेखा है:

$test=crypt($password,$hash);  

return self::same($test, $hash);

नमक के बारे में क्या? मेरी समझ के लिए यह भी नहीं रखा गया है, लेकिन यह कोई मतलब नहीं है, इसलिए मुझे लग रहा है कि मैं इसे पूरी तरह समझ नहीं पाया।


नमक को हैश के भाग के रूप में संग्रहित किया जा रहा है।


CPasswordHelper PHP के कार्यों की तरह काम करता है password_hash () और password_verify () , वे crypt () फ़ंक्शन के आसपास रैपर हैं। जब आप एक BCrypt हैश उत्पन्न करते हैं, तो आपको नमक युक्त 60 वर्णों की एक स्ट्रिंग मिल जाएगी।

// Hash a new password for storing in the database.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

$ HehToStoreInDb चर में अब इस तरह एक हैश-मान शामिल होगा:

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |                     |
 |  |  |                     hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |
 |  |  salt = nOUIs5kJ7naTuTFkBy1veu
 |  |
 |  cost-factor = 10 = 2^10 iterations
 |
 hash-algorithm = 2y = BCrypt

आप $ बाद पा सकते हैं नमक, यह स्वचालित रूप से password_hash () द्वारा ऑपरेटिंग सिस्टम के यादृच्छिक स्रोत का उपयोग करके उत्पन्न होता है। चूंकि परिणामी स्ट्रिंग में नमक शामिल होता है, फ़ंक्शन password_verify (), या वास्तव में लिपटे क्रिप्ट फ़ंक्शन, इसे वहां से निकाल सकते हैं, और एक ही नमक (और उसी लागत कारक) के साथ एक हश की गणना कर सकते हैं। उन दो हंसें तब तुलनीय हैं।

// 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);