3

我相信使用 PHP 的 password_hash() 函数散列的密码可能会转移到不同的系统,并且仍然可以成功地用于验证目的。

据我了解,bcrypt 哈希包含所有必要的组件,当与纯文本密码结合使用时,可以验证给定的密码。因此,可以将散列带到任何具有兼容实现的系统并用于验证目的。

我很快就会尝试这个,但在我这样做之前,我想知道我的理论是否正确。

它是否正确?

4

4 回答 4

5

是的,这是正确的。状态的文档password_verify

请注意,password_hash()返回算法、成本和盐作为返回哈希的一部分。因此,验证哈希所需的所有信息都包含在其中。这允许验证函数验证哈希,而无需单独存储盐或算法信息。

当然,通过检查 and 的输出也很容易看出这些信息是存在的(也就是说password_hashcrypt过度概括一下,大部分是相同的东西)。

于 2013-09-25T13:16:42.393 回答
2

是的,crypt()基于哈希是可移植的;它们可以传输到任何系统,并且可以用于成功验证给定密码,因为它包含执行此验证所需的所有数据。

请注意,由于需要更多的迭代次数,高成本因素可能会导致较小的系统需要更长的时间来验证密码。

还要注意存储要求;如果您总是要使用 bcrypt,那么将密码哈希存储在varchar(60)列中是安全的。否则varchar(255)推荐。

于 2013-09-25T13:16:32.853 回答
1

bcrypt 算法包括它自己的向量和/或盐,应该是可移植的。hash 和 vecotor/salt 都不包含任何特定于系统的东西。

这也应该适用于不使用 vecotr(或除散列之外的其他元素)或在其输出中包含此散列的任何其他算法。

于 2013-09-25T13:16:52.463 回答
-2

我不知道你想把哈希保存在哪里,但是如果你把它保存到数据库中,使用数据库自​​己的加密/哈希函数会抱怨它

示例(带加密)

INSERT INTO table (pass_hash,....) VALUES ( MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 (" $password ") )
SELECT * FROM table WHERE pass_hash = MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 (" $password ")
于 2013-09-25T13:11:14.057 回答