php password_hash(存储在db中的问题)

时间:2017-02-08 08:42:01

标签: php algorithm security hash

我一直在阅读有关密码哈希函数的内容,并且说:使用salt来加强黑客的工作,使用高度成本算法等 我找到了这个password_hash函数,但是......它返回了这个(字母是一个解释的例子)

AAAACCCSSS .... SSSHHH ..... HHHH

示例:

You can find here an example

其中:

  • AAA是算法
  • CCC是费用
  • SSS .... SSS是盐
  • HHH ..... HHHH是我们得到的哈希

我认为(我认为)算法,成本和盐用于使黑客的生活变得更加困难,如果我使用它,我的哈希会更安全

但是,如果我使用了所有这些,但我告诉黑客我正在使用这种盐,算法和成本会发生什么?

这样做我给了黑客很多线索

我的意思是,

我可以在我的数据库中存储所有字符串吗?

我必须将哈希和(算法,成本,盐)存储在不同的地方吗?

如果有人拿到我的数据库,他就拥有所有哈希密码。

2 个答案:

答案 0 :(得分:1)

安全性不是来自秘密信息。它来自于计算成本非常高的算法。

这里的攻击是猜测一个明文,当用给定的算法和盐和成本进行散列时,将产生相同的散列值。即使提供了所有信息(明显除了明文)并假设有一个强大的(随机)明文密码,也需要很多,可能千年来找到一个这样的值。这只是一个密码哈希,更不用说整个哈希数据库了。

保护是使用足够昂贵的算法使猜测不可能慢,而不是保持算法的细节(盐和成本是秘密的)。

答案 1 :(得分:1)

salt的目的是确保哈希是唯一生成的,并且无法在现有数据库(例如MD5 Decrypt)中查找。即使盐被泄露,攻击者也必须单独破坏每个哈希密码。

  

我可以在我的数据库中存储所有字符串吗?

是的,您可以像WordPress一样将其存储在数据库中。

  

如果有人拿到我的数据库,他就拥有所有哈希密码。

是的,但正如我所提到的,除非密码是使用蛮力单独破解的,否则哈希是没用的,这会花费大量的计算成本。