كيف هي هذه السطور 2 من PHP مختلفة؟
سؤال
وعلى افتراض لدينا ملح هذا في قاعدة البيانات والتي تم إنشاؤها مثل هذا
و$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 .
لا تنتمي إلى StackOverflow