Php 是否建议将Bcrypt哈希密码直接存储在DB中?

Php 是否建议将Bcrypt哈希密码直接存储在DB中?,php,hash,bcrypt,Php,Hash,Bcrypt,因为散列字符串的格式($2y$10$salt…)本身就为黑客(即谁入侵了数据库)提供了线索,即加密是使用Bcrypt算法完成的,因此他可以通过使用密码\u verify()轻松进行黑客攻击在php中,通过将参数作为他的猜测密码进行传递。将这些BCrypt散列直接存储在数据库中没有缺点,所有参数都不是秘密的。此外,它们允许切换到更好的算法(或增加成本因素),而不会与旧的哈希不兼容 如果这些参数以某种方式被隐藏,攻击者将不得不猜测它们。但是没有这么多可能的值,例如,成本系数仅在9-13之间有意义。如

因为散列字符串的格式($2y$10$salt…)本身就为黑客(即谁入侵了数据库)提供了线索,即加密是使用Bcrypt算法完成的,因此他可以通过使用密码\u verify()轻松进行黑客攻击在php中,通过将参数作为他的猜测密码进行传递。

将这些BCrypt散列直接存储在数据库中没有缺点,所有参数都不是秘密的。此外,它们允许切换到更好的算法(或增加成本因素),而不会与旧的哈希不兼容


如果这些参数以某种方式被隐藏,攻击者将不得不猜测它们。但是没有这么多可能的值,例如,成本系数仅在9-13之间有意义。如果您真的想添加这样一个服务器端机密,有更好的方法。您可以使用强密钥加密(双向)已经散列的值,然后攻击者必须“猜测”该密钥,这是不可能的。

我不会说“容易”:强制Bcrypt需要非常非常长的时间。是的,这样做很好。对bcrypt的暴力攻击不是一种非常有效的方法,尤其是当你增加成本时。我在互联网上看到,bcrypt是基于河豚密码的。但Blowfish实现似乎同时具有加密和解密功能。因此,这意味着可以解密bcrypted散列值吗?@user3767551-BCrypt确实基于Blowfish,但虽然Blowfish是一种加密算法(双向),但BCrypt是一种真正的散列算法(单向)。