Ada beberapa poin yang dapat ditingkatkan, tetapi pertama-tama saya akan merekomendasikan untuk menggunakan fungsi baru PHP password_hash() . Fungsi ini akan menghasilkan garam aman dan memasukkannya ke dalam nilai hash yang dihasilkan, sehingga Anda dapat menyimpannya dalam satu bidang basis data. Ada juga paket kompatibilitas untuk versi sebelumnya.
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// 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);
Beberapa pemikiran tentang kode Anda:
- Anda membuat hash BCrypt dengan crypt(), sehingga garam akan menjadi bagian dari hash yang dihasilkan. Tidak perlu menyimpannya secara terpisah.
- Pembuatan garam dapat ditingkatkan, gunakan sumber acak dari sistem operasi MCRYPT_DEV_URANDOM.
- Jika Anda akan mengubah faktor biaya menjadi 9, formatnya akan menjadi tidak valid, karena crypt mengharapkan dua digit.