我正在使用 PHPcrypt
函数用于密码散列/加密,但我认为我做得不对,因为“nathan12”和“nathan123”都允许我登录系统上的帐户(实际密码是“nathan123”,因此“nathan12” “或者其他什么应该NOT允许我登录)。
这是我的系统在用户注册时执行的操作:
[...]
$salt = uniqid(mt_rand(), true);
$password = crypt($password, $salt); // '$password' is the inputted password
$insertUserStmt = $mysqli->prepare("INSERT INTO users (name,
username,
password,
password_salt,
email,
created) VALUES (?, ?, ?, ?, ?, ?)");
$insertUserStmt->bind_param("sssssi", $name, $username, $password, $salt, $email, time());
$insertUserStmt->execute();
[...]
它插入散列/加密的密码($password
)与数据库一起$salt
.
当有人尝试登录时,将执行以下操作来检查用户是否输入了他们输入的用户名的正确密码:
[...]
// $password_salt is from DB; $password is inputted password
$password_crypt = crypt($password, $password_salt);
// $login_password is from DB
if($password_crypt == $login_password) {
[...]
我可能甚至没有使用crypt
功能正常,但根据 PHP 文档,第一个参数是字符串(密码),第二个参数是盐。