【问题标题】:Setting a salt for password_hash()为 password_hash() 设置盐
【发布时间】:2016-01-07 18:37:27
【问题描述】:

我正在 PHP 中为owncloud 创建一个大规模用户导入脚本。我从 CSV 文件中读取用户,然后将它们添加到 owncloud database。不过我的密码有问题。据我所知,owncloud 使用password_hash()BCRYPT。我有passwordsalt,但我不确定如何将盐与password_hash() 一起使用。

有什么帮助吗?

【问题讨论】:

  • Bcrypt 生成自己的盐 - 你不需要添加一个。您也不需要存储一个,因为 bcrypt 生成的盐是生成的 bcrypt 哈希的一部分。
  • 这很简单,甚至不值得成为答案。只需将盐附加到您正在散列的密码的某个位置。在开始时,在结束时,或两者兼而有之,或其他。这种做法的原因是人们可以将哈希字典形成密码,这使得在被盗数据库中找到常用密码变得容易。 SALT 有帮助,因为所有密码都是唯一的,即使是 qwerty

标签: php salt owncloud php-password-hash


【解决方案1】:

像这样在选项数组中使用盐

password_hash("rasmuslerdorf", PASSWORD_BCRYPT, array("cost" => 7, "salt" => "thisisyoursalt"));

但是使用自己的盐并不是一个好主意。让password_hash() 为您的密码创建一个盐。 password_hash() 将为每个密码创建不同的盐。它将增加您的密码安全强度。

【讨论】:

  • 也许应该附上说明为什么使用自己的盐是个坏主意^^
  • owncloud 似乎有不同的做法。我使用他们的 salt 获得了不同的密码,但我理解为什么使用预定的 salt 不是一个好主意。
  • 感谢您的回答。我将您的答案标记为正确,因为它回答了我的问题,只是不太符合我的要求。不过我确实设法让它工作了,所以谢谢。
【解决方案2】:

如果哈希是由password_hash()crypt() 生成的,那么盐就包含在生成的哈希值中。要检查这个哈希的密码,你可以使用函数password_verify(),这个函数会自动提取盐和其他参数。

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2015-04-17
    • 2014-01-15
    • 2014-12-03
    相关资源
    最近更新 更多