当前位置: 首页 > 知识库问答 >
问题:

PHP password_hash(),默认的还是自定义的salt?[副本]

巢权
2023-03-14

我正在考虑使用password_hash()函数来加密用户密码。据我所知,如果您不提供salt,这个函数将默认生成salt,甚至鼓励您使用默认的salt而不是您自己的salt。我目前正在权衡3个选择,不能决定哪一个去,所以如果你能帮助我,我会很感激。

1.选项:password_hash()和默认salt

$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()

$salt = uniqid(rand(0, 1000000);
$passwordInput = $_POST['password'];
$password = hash('sha512', $salt . $passwordInput);
//INSERT $password AND $salt INTO DATABASE SEPARATELY

共有1个答案

钱修雅
2023-03-14

这个问题的简单答案是使用password_hash()和默认salt(您的第一个选项),在PHP7中不推荐使用自定义salt,因为引用php.net:

password_hash()函数的salt选项已被否决,以防止开发人员生成他们自己的(通常是不安全的)salt。当开发人员没有提供salt时,函数本身会生成加密安全的salt-因此不需要自定义salt生成。

同样,应该避免使用第三个选项hash(),因为您需要生成自己的salt。

 类似资料:
  • 我在使用Gradle api的Gradle自定义插件中工作,需要设置一个始终执行的操作,比如配置任务。 我以这种方式创建了一些任务: 然后添加到项目中: ...这些工作原理是:当我显式调用myWork目标时,它会被执行,但是我需要一个每次都被执行的任务,即使没有显式调用。

  • 问题是,我有一个警报对话框,在这个对话框中,我通过以下方式为自定义布局充气: 问题是如何自定义

  • 当我在JAX-RS中添加字符串的默认值时,它不接受该值。它保持为null或空。 当我将状态传递为空或或未定义时,它将保持为空或或未定义。它不会将默认值视为已确认。

  • 我正在为我的应用程序实现一个发布机制,并希望使用REST API将其与我的YouTrack耦合。 在发布时,我想将新创建的问题的默认值‘修复版本’设置为bumped版本。

  • 使用spring ACL,我可以为Subject上的某些操作配置权限。我的应用程序很少需要自定义对主题的访问权限。因此,我不想为默认依赖项填充ACL,但如果ACL为空,则需要特殊说明。 例如,我们有

  • 有没有办法配置默认消息 或 在上面的示例中,