PHP Bcrypt 哈希
我想使用 Blowfish 哈希 来哈希密码。
crypt()
在 5.3 之前的 PHP 版本中不支持它,
我的 PHP 版本是 5.2.14。如何使用 Blowfish 哈希?我可以使用 PEAR 的 Crypt_Blowfish
代替吗?
I want to use Blowfish hashing to hash password.
crypt()
does not support it in PHP versions prior to 5.3
My PHP version is 5.2.14. How can I use Blowfish hashing? Can I use PEAR's Crypt_Blowfish
instead?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
PEAR 的 Crypt_Blowfish 旨在替代 PHP 的 MCrypt 扩展 - 它是一种双向加密方案,而不是散列。虽然 bcrypt 基于 Blowfish,但它们不是同一回事。令人困惑的是,PHP 5.3.0 的 CRYPT_BLOWFISH 是一种哈希算法。
是否存在无法升级到 PHP 5.3.0+ 的原因?这不是您想要尝试自己实现的事情。如果可以的话,phpass 是安全地进行基于 bcrypt 的密码散列的好方法。如果您绝对无法升级,phpass 会回退到较旧的哈希方案(但它仍然比普通 MD5 等更安全)。
如果由于某种原因您可以安装 Suhosin 但不能升级 PHP,这将添加 CRYPT_BLOWFISH 支持。
为了确保您当前没有安装 CRYPT_BLOWFISH,请尝试以下操作:
PEAR's Crypt_Blowfish is meant to stand in for PHP's MCrypt extension - it's a two-way encryption scheme, not for hashing. While bcrypt is based on Blowfish, it's not the same thing. Confusingly, PHP 5.3.0's CRYPT_BLOWFISH is a hashing algorithm.
Is there a reason why upgrading to PHP 5.3.0+ would not be possible? This isn't something you want to try to implement yourself. If you can, phpass is a great way to do bcrypt-based password hashing securely. If you absolutely can't upgrade, phpass falls back to older hashing schemes (but it's still more secure than plain MD5, etc).
If for some reason you can install Suhosin but not upgrade PHP, that would add CRYPT_BLOWFISH support.
To make sure you don't currently have CRYPT_BLOWFISH installed, try the following:
PEAR 的 Crypt_Blowfish 包使用 mcrypt 扩展(如果可用)提供河豚加密,如果不可用,则实现php 中原生的河豚算法。它不会退回到使用任何其他形式的加密。
虽然该包没有“手写”文档,但有 自动生成的 API文档源自包本身的注释。
这就是我使用它来加密:
和解密:
其中 BLOWFISH_KEY 是我在代码中其他地方定义的常量。
在这些示例中,我明确使用 PHP 实现。
如果我希望 Crypt_Blowfish 决定使用哪个引擎,即确定它是否可以使用 mcrypt 扩展(如果可用)(否则使用 php 实现),那么我会使用 CRYPT_BLOWFISH_AUTO 进行切换。要显式使用 mcrypt 扩展,请指定 CRYPT_BLOWFISH_MCRYPT。
PEAR's Crypt_Blowfish package provides blowfish encryption using the mcrypt extension if it is available, and if not it implements the blowfish algorithm natively in php. It does not fall back to using any other form of encryption.
There is no "hand-written" documentation for the package though, there is auto-generated API documentation derived from annotations in the package itself.
This is how I use it to encrypt:
And to decrypt:
Where BLOWFISH_KEY is a constant which I've defined elsewhere in the code.
In these examples I am explicitly using the PHP implementation.
If I wanted Crypt_Blowfish to decide which engine to use, i.e. to determine if it can use the mcrypt extension if it is available (and otherwise use the php implementation) then I'd change over with CRYPT_BLOWFISH_AUTO. To explicitly use the mcrypt extension, specify CRYPT_BLOWFISH_MCRYPT.