سؤال

وعلى افتراض لدينا ملح هذا في قاعدة البيانات والتي تم إنشاؤها مثل هذا

و$salt = time();

ما هو الفرق بين هذه السطور 2.

$pass1 = hash('sha1', $password . $salt);

$pass2 = hash_hmac('sha1', $password, $salt);

وأنها لا تنتج نفس المخرجات. أول واحد، وظيفة hash يأخذ 2 بارامس، في حين أن hash_hmac يحتاج 3 بارامس. ولذلك كنت تعتقد أن نتمكن من الحصول على تلك المعلمة إضافي ثالث باستخدام $salt بشكل منفصل (للوفاء المعلمة الثالث) في مقابل وصل مع كلمة المرور ($password . $salt) كما فعلنا في خط 2. ولكنها ليست بهذه البساطة، و2 النتائج مختلفة. لماذا ا؟ ما يجري بالضبط هنا؟

هل كانت مفيدة؟

المحلول

ولأن HMAC SHA-1 ليست هي نفسها كما SHA-1 مع رسالة والمفتاح متصلا. HMAC هو أشبه sha1($salt . sha1($salt . $password))، ولكن ليس بالضبط. ويكيبيديا لديها وصفا لطيف من HMAC .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top