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

PHP的密码_hash():公共一次性盐与私人固定盐

庾鸿飞
2023-03-14

PHP手册为password_hash()(http://php.net/manual/en/function.password-hash.php)说:

使用的算法、成本和salt作为散列的一部分返回。因此,验证哈希所需的所有信息都包含在其中。

我的问题是:为什么?

我在另一个SO答案中读到了这一点:(静态Salt与随机Salt-安全PHP)

随机盐有巨大的好处。如果系统中的所有帐户都使用相同的salt,则攻击者可以暴力计算该salt的哈希值,并通过一次计算运行闯入所有帐户。

我明白了。但是,password_hash()将盐嵌入返回的哈希中,我相信这会使其公开,因此攻击者知道每个密码的盐。

换成长私盐不是更好吗?

我能想到的一件事是,使用相同的salt创建的散列对于相同的密码是相同的,并且可能允许攻击者通过对数据库中的散列进行统计分析来取得进展。

然而,这可以通过使用私有哈希字典而不是仅仅使用一个字典来缓解,但是在PHP7中,使用password\u hash()就不再可能了。

我不是安全专家,我相信PHP的人知道他们在做什么,所以我很高兴听到为什么password\u hash()way被认为是正确的方法。

共有1个答案

鲜于光辉
2023-03-14

我找到了这个答案:

http://php.net/manual/en/function.password-hash.php#114410

如果您想“为什么盐包含在散列中,并且当我将它存储在数据库中时它是否保存?”

我发现答案是:盐必须是独一无二的。这不是秘密。

正如之前在notes和docu中提到的:让密码\u hash()处理盐。

使用这种独特的盐,你可以迫使攻击者破解散列。哈希是唯一的,无法在rainbow表中找到。

 类似资料:
  • 问题内容: 目前,据说MD5部分不安全。考虑到这一点,我想知道使用哪种机制进行密码保护。 这个问题,“双重哈希”密码是否比仅哈希一次密码安全? 建议多次散列可能是一个好主意,而如何对单个文件实施密码保护?建议使用盐。 我正在使用PHP。我想要一个安全,快速的密码加密系统。将密码哈希一百万次可能更安全,但也更慢。如何在速度和安全性之间取得良好的平衡?另外,我希望结果具有恒定数量的字符。 哈希机制必须

  • 我想用bcrypt和Spring security哈希和salt用户密码。 下面是我如何用他们自己的salt创建新用户: 下面是spring配置: 在此配置中,我指示必须使用; 有没有办法使用我的?或 哪个可靠的算法允许我的? 多谢了。

  • 在kotlin中定义一个有公共getter和私有(只有内部可修改)setter的var的正确方法是什么?

  • 我有一个由两个Symfony应用程序使用的库,该库定义了一组我希望公开的服务(我希望能够通过容器直接检索这些服务)。当我尝试访问一个服务时,我有: 编译容器时,已删除或内联库\Service\DerivedServices\OneSpecific实现"服务或别名。您应该将其公开,或者直接停止使用容器,转而使用依赖注入。 问题是,所述服务是公开的。 基本上有: 一个库\服务\BaseService类

  • 如何在Kotlin中创建一个具有私有getter(或只是没有)但具有公共setter的属性? 不能使用错误: 在我的例子中,原因是Java Interop:我希望我的Java代码能够调用,但不能调用。

  • 如果用户创建了一个新密码,并通过哈希算法存储在数据库中,则在用户登录时可以将其与用户输入的密码进行匹配。输入到登录屏幕的密码将被哈希化,然后检查它是否与存储的哈希匹配。如果是,则允许用户访问。 然而,如今,密码是经过哈希和盐处理的。因此,当用户第一次注册密码时,它会经过一个散列,然后会被加密10000次以上。这个salt与后端代码生成的关键字相同,还是每次salt都随机生成? 当用户输入密码登录时