Trước hết, DBMS (MySQL) của bạn không cần phải có bất kỳ hỗ trợ nào cho các hàm băm mật mã. Bạn có thể làm tất cả những điều đó về phía PHP và đó cũng là điều bạn nên làm.
Nếu bạn muốn lưu trữ muối và băm trong cùng một cột, bạn cần phải nối chúng với nhau.
// the plaintext password
$password = (string) $_GET['password'];
// you'll want better RNG in reality
// make sure number is 4 chars long
$salt = str_pad((string) rand(1, 1000), 4, '0', STR_PAD_LEFT);
// you may want to use more measures here too
// concatenate hash with salt
$user_password = sha512($password . $salt) . $salt;
Bây giờ, nếu bạn muốn xác minh mật khẩu, bạn thực hiện:
// the plaintext password
$password = (string) $_GET['password'];
// the hash from the db
$user_password = $row['user_password'];
// extract the salt
// just cut off the last 4 chars
$salt = substr($user_password, -4);
$hash = substr($user_password, 0, -4);
// verify
if (sha512($password . $salt) == $hash) {
echo 'match';
}
Bạn có thể muốn xem phpass , cũng sử dụng kỹ thuật này. Đây là một giải pháp băm PHP sử dụng muối trong số một số thứ khác.
Bạn chắc chắn nên xem câu trả lời cho câu hỏi mà WolfOdrade liên kết với.