【问题标题】:password_hash, Password_default causing issuepassword_hash,Password_default 导致问题
【发布时间】:2018-08-01 05:44:42
【问题描述】:

我有 2 个具有不同代码的注册页面,但我希望它们返回相同的密码哈希!或至少 Password_verify 接受的格式 首先是:

function _password_hash($password) {
    return password_hash($password, PASSWORD_DEFAULT);
}

  $db->query(sprintf("INSERT INTO users (user_name, user_email, user_phone, user_password, user_firstname, user_lastname, user_gender, user_birthdate, user_registered, user_activation_key) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", secure($args['username']), secure($args['email']), secure($args['phone']), secure(_password_hash($args['password'])), secure(ucwords($args['first_name'])), secure(ucwords($args['last_name'])), secure($args['gender']), secure($args['birth_date']), secure($date), secure($activation_key) )) or _error(SQL_ERROR_THROWEN);

第二个是:

$user_firstname = $mysqli->escape_string($_POST['firstname']);
$user_lastname = $mysqli->escape_string($_POST['lastname']);
$user_name = $mysqli->escape_string($_POST['user_name']);
$user_email = $mysqli->escape_string($_POST['user_email']);
$user_password = $mysqli->escape_string(password_hash($_POST['user_password'], PASSWORD_DEFAULT));
$hash = $mysqli->escape_string(md5(time()*rand(1, 9999)));

$sql = "INSERT INTO users (user_firstname, user_lastname, user_name, user_email, user_password, hash) "
        . "VALUES ('$user_firstname','$user_lastname','$user_name','$user_email','$user_password', '$hash')";

密码输出不一样

【问题讨论】:

  • 当然它不会给你相同的,他们会产生不同的盐。更好的问题是,您似乎是如何以两种不同的方式到达需要 2 次不同注册的地方...
  • 旁注:不要逃避密码,你可能弊大于利。 password_hash()password_verify() 已经考虑到这一点。

标签: php mysql hash passwords


【解决方案1】:

函数password_hash() 不会因为加盐而返回相同的密码哈希,但它总是产生password_verify() 接受的格式。如果不是这种情况,请检查哈希是否存储为varchar(255),并且两个页面使用相同的 PHP 版本。

如果你使用 password_hash() 既不转义用户密码,也不应该转义密码哈希(它已经是安全的形式)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2020-01-21
    • 2016-04-13
    • 2015-07-08
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多