یک نمونه عملی:
نگارش های ورژن 2 به بعد فوروم IPB (قبل از آن فقط هش کردن ساده بود) .
برای مثال فوروم IPB 2.0.3 از کد زیر برای تولید salt استفاده می کند:
function generate_password_salt($len=5)
{
$salt = '';
srand( (double)microtime() * 1000000 );
for ( $i = 0; $i < $len; $i++ )
{
$num = rand(33, 126);
if ( $num == '92' )
{
$num = 93;
}
$salt .= chr( $num );
}
return $salt;
}
این اطلاعات در جدول ibf_members_converge ذخیره می شود:
CREATE TABLE `ibf_members_converge` (
`converge_id` int(10) NOT NULL auto_increment,
`converge_email` varchar(250) NOT NULL default '',
`converge_joined` int(10) NOT NULL default '0',
`converge_pass_hash` varchar(32) NOT NULL default '',
`converge_pass_salt` varchar(5) NOT NULL default '',
PRIMARY KEY (`converge_id`),
KEY `converge_email` (`converge_email`)
) TYPE=MyISAM;
و در نهایت با استفاده از کد زیر اعتبار سنجی پسورد وارد شده را انجام می دهد:
function generate_compiled_passhash($salt, $md5_once_password)
{
return md5( md5( $salt ) . $md5_once_password );
}
هنگام ثبت نام:
پسورد دریافت می شود و سپس هش می شود. بعد بعنوان ورودی تابع فوق بعنوان md5_once_password دریافت می گردد. نمک کار (salt) با استفاده از تابع generate_password_salt تولید می شود. نهایتا generate_compiled_passhash در هنگام رجیستر کردن کاربران درون فیلد converge_pass_hash ذخیره می گردد.
هنگام لاگین:
Salt از فیلد converge_pass_salt خوانده می شود و بعد درون تابع مورد استفاده قرار می گیرد.
پسورد دریافت می شود و سپس هش می شود. بعد بعنوان ورودی تابع فوق بعنوان md5_once_password دریافت می گردد.
حاصل نهایی تابع باید با مقدار موجود در فیلد converge_pass_hash یکسان باشد.
Happy integrating