Tôi hiện đang triển khai hệ thống đăng nhập. Tôi muốn lưu trữ mật khẩu và muối trong cơ sở dữ liệu. Bây giờ tôi phát hiện ra rằng có một hash()
và một chức năng crypt()
mà dường như làm như vậy (hợp lệ cho SHA512).so sánh hàm băm() so với crypt()
hash()
mới hơn và có vẻ như hỗ trợ nhiều alogrithms băm hơn crypt()
. Hoặc có bất kỳ sự khác biệt nào khác mà tôi nên biết/quan tâm không?
Edit:
function generatePasswordHash($password){
$salt = base64_encode(mcrypt_create_iv(8));
$calculatedPasswordHash = crypt($password, '$1$' . $salt . '$');
return $calculatedPasswordHash;
}
Kết quả trông giống như $1$Qh6ByGJ9$zLn3yq62egvmc9D7SzA2u.
Đây chức năng kiểm tra mật khẩu của tôi:
function checkLoginData($username, $password){
global $db;
$sql = "SELECT * FROM users WHERE username = :username";
$result = $db->ExecuteQuery($sql, array("username"=>$username));
if(!empty($result)){
$result = $result[0];
$savedPasswordHash = $result['password'];
$splitted = explode("$", $savedPasswordHash);
$salt = $splitted[2];
$calculatedPasswordHash = crypt($password, '$1$' . $salt . '$');
if($savedPasswordHash === $calculatedPasswordHash){
return true;
}
}
return false;
}
@CodeInChaos: Lưu trữ và truy cập băm mật khẩu từ cơ sở dữ liệu. Cả hai có thể lấy muối (thêm muối vào tham số '$ data' của' hash() 'thông qua nối). – testing
Chỉ cần ghép nối muối vào dữ liệu là không an toàn trong nhiều trường hợp. Đừng làm điều đó, trừ khi bạn thực sự biết những gì bạn đang làm. Nó cũng * nhanh * và bạn muốn nó * chậm *. – CodesInChaos
Mã mới mã hóa mật khẩu, thay vì băm. tức là có thể đảo ngược tầm thường của nó. – CodesInChaos