मैं अपने डेटाबेस में पासवर्ड स्टोर और सत्यापित करने के तरीके के रूप में PHP के crypt()
का उपयोग कर रहा हूं। मैं अन्य चीजों के लिए हैशिंग का उपयोग करता हूं, लेकिन crypt()
पासवर्ड के लिए। दस्तावेज इतना अच्छा नहीं है और ऐसा लगता है कि बहुत बहस हो रही है। मैं पासवर्ड को क्रिप्ट करने और डेटाबेस में स्टोर करने के लिए ब्लाफिश और दो लवण का उपयोग कर रहा हूं। इससे पहले कि मैं नमक और एन्क्रिप्टेड पासवर्ड स्टोर करूंगा, (एक नमकीन हैश की तरह) लेकिन इसका अनावश्यक महसूस हुआ क्योंकि नमक एन्क्रिप्टेड पासवर्ड स्ट्रिंग का हिस्सा है।क्या मैं PHP के क्रिप्ट() फ़ंक्शन का सही उपयोग कर रहा हूं?
मैं थोड़ा उलझन में हूं कि इंद्रधनुष तालिका के हमले crypt()
पर कैसे काम करेंगे, वैसे भी यह एक सुरक्षा दृष्टिकोण से सही दिखता है। मैं छोटे पासवर्ड की एन्ट्रॉपी बढ़ाने के लिए पासवर्ड में जोड़ने के लिए दूसरा नमक का उपयोग करता हूं, शायद अधिक मात्रा में लेकिन क्यों नहीं?
function crypt_password($password) {
if ($password) {
//find the longest valid salt allowed by server
$max_salt = CRYPT_SALT_LENGTH;
//blowfish hashing with a salt as follows: "$2a$", a two digit cost parameter, "$", and 22 base 64
$blowfish = '$2a$10$';
//get the longest salt, could set to 22 crypt ignores extra data
$salt = get_salt ($max_salt);
//get a second salt to strengthen password
$salt2 = get_salt (30); //set to whatever
//append salt2 data to the password, and crypt using salt, results in a 60 char output
$crypt_pass = crypt ($password . $salt2, $blowfish . $salt);
//insert crypt pass along with salt2 into database.
$sql = "insert into database....";
return true;
}
}
function get_salt($length) {
$options = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./';
$salt = '';
for($i = 0; $i <= $length; $i ++) {
$options = str_shuffle ($options);
$salt .= $options [rand (0, 63)];
}
return $salt;
}
function verify_password($input_password)
{
if($input_password)
{
//get stored crypt pass,and salt2 from the database
$stored_password = 'somethingfromdatabase';
$stored_salt2 = 'somethingelsefromdatabase';
//compare the crypt of input+stored_salt2 to the stored crypt password
if (crypt($input_password . $stored_salt2, $stored_password) == $stored_password) {
//authenticated
return true;
}
else return false;
}
else return false;
}
'रैंड' के बजाय 'mt_rand' का उपयोग करना आपकी स्क्रिप्ट – Sliq