PHP password_hash(),默认盐还是自定义盐?
PHP password_hash(), default or custom salt?
我正在考虑使用 password_hash() 函数来加密用户密码。我知道如果你不提供这个函数默认生成盐,甚至鼓励使用默认盐而不是你自己的盐。我目前正在权衡 3 个选项,无法决定选择哪一个,所以如果你能帮助我,我将不胜感激。
1.选项:password_hash() 默认盐
$passwordInput = $_POST['password'];
$passwordHash = password_hash($passwordInput, PASSWORD_BCRYPT);
//INSERT $passwordHash INTO DATABASE
2。选项:password_hash() 带有自定义盐
$options = ['salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)];
$passwordInput = $_POST['password'];
$passwordHash = password_hash($passwordInput, PASSWORD_BCRYPT, $options);
//INSERT $passwordHash INTO DATABASE
3。选项:根本不使用 password_hash()
我将此选项基于 2014 年的 post:The definitive guide to form-based website authentication。基本上,如果它是比 password_hash() 更安全的方法,我会使用这样的方法:
$salt = uniqid(rand(0, 1000000);
$passwordInput = $_POST['password'];
$password = hash('sha512', $salt . $passwordInput);
//INSERT $password AND $salt INTO DATABASE SEPARATELY
这个问题的真正简短答案是使用 password_hash()
和默认盐(您的第一个选项),自定义盐在 PHP7 中被弃用,因为引用 php.net:
The salt option for the password_hash() function has been deprecated to prevent developers from generating their own (usually insecure) salts. The function itself generates a cryptographically secure salt when no salt is provided by the developer - therefore custom salt generation should not be needed.
出于同样的原因,您的第三个选项 hash()
应该避免,因为您需要生成自己的盐。
我正在考虑使用 password_hash() 函数来加密用户密码。我知道如果你不提供这个函数默认生成盐,甚至鼓励使用默认盐而不是你自己的盐。我目前正在权衡 3 个选项,无法决定选择哪一个,所以如果你能帮助我,我将不胜感激。
1.选项:password_hash() 默认盐
$passwordInput = $_POST['password'];
$passwordHash = password_hash($passwordInput, PASSWORD_BCRYPT);
//INSERT $passwordHash INTO DATABASE
2。选项:password_hash() 带有自定义盐
$options = ['salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)];
$passwordInput = $_POST['password'];
$passwordHash = password_hash($passwordInput, PASSWORD_BCRYPT, $options);
//INSERT $passwordHash INTO DATABASE
3。选项:根本不使用 password_hash()
我将此选项基于 2014 年的 post:The definitive guide to form-based website authentication。基本上,如果它是比 password_hash() 更安全的方法,我会使用这样的方法:
$salt = uniqid(rand(0, 1000000);
$passwordInput = $_POST['password'];
$password = hash('sha512', $salt . $passwordInput);
//INSERT $password AND $salt INTO DATABASE SEPARATELY
这个问题的真正简短答案是使用 password_hash()
和默认盐(您的第一个选项),自定义盐在 PHP7 中被弃用,因为引用 php.net:
The salt option for the password_hash() function has been deprecated to prevent developers from generating their own (usually insecure) salts. The function itself generates a cryptographically secure salt when no salt is provided by the developer - therefore custom salt generation should not be needed.
出于同样的原因,您的第三个选项 hash()
应该避免,因为您需要生成自己的盐。