PHP Bcrypt hashing



我想使用河豚哈希来哈希密码。

crypt()在5.3之前的PHP版本中不支持

我的PHP版本是5.2.14。我如何使用河豚哈希?我可以用PEAR的Crypt_Blowfish代替吗?

PEAR的Crypt_Blowfish意味着代表PHP的MCrypt扩展-它是一个双向加密方案,而不是用于散列。虽然比特币是基于河豚,但这不是一回事。令人困惑的是,PHP 5.3.0的CRYPT_BLOWFISH是一个哈希算法。

为什么升级到PHP 5.3.0+是不可能的?这不是你想自己实现的东西。如果可以的话,phpass是安全地进行基于加密的密码散列的好方法。如果你绝对不能升级,phpass会退回到旧的散列方案(但仍然比普通MD5等更安全)。

如果出于某种原因,你可以安装Suhosin但不升级PHP,这将增加CRYPT_BLOWFISH支持。

要确保您当前没有安装CRYPT_BLOWFISH,请尝试以下操作:

 echo (CRYPT_BLOWFISH === 1) ? 'CRYPT_BLOWFISH is enabled!' : 'CRYPT_BLOWFISH is not available'; 

PEAR的Crypt_Blowfish包在可用的情况下使用mcrypt扩展提供河豚加密,如果不可用,则在php中本地实现河豚算法。它不能退回到使用任何其他形式的加密。

虽然没有"手写"的包文档,但有从包本身的注释派生的自动生成的API文档。

我是这样用它来加密的:

$bf = Crypt_Blowfish::factory('ecb', null, null, CRYPT_BLOWFISH_PHP);
$iv = 'abc123+=';                                                      
$key = BLOWFISH_KEY;                                                   
$bf->setKey($key, $iv);                                                
$encrypted = bin2hex($bf->encrypt($password));        

和解密:

$bf = Crypt_Blowfish::factory('ecb', null, null, CRYPT_BLOWFISH_PHP);       
$iv = 'abc123+=';                                                              
$key = BLOWFISH_KEY;                                                           
$bf->setKey($key, $iv);                                                        
$decrypted = trim($bf->decrypt(hex2bin($password))); 

其中BLOWFISH_KEY是一个常量,我已经在代码的其他地方定义了。

在这些示例中,我显式地使用PHP实现。

如果我想要Crypt_Blowfish决定使用哪个引擎,即确定它是否可以使用mcrypt扩展,如果它是可用的(否则使用php实现),那么我将与CRYPT_BLOWFISH_AUTO切换。要显式地使用mcrypt扩展,请指定CRYPT_BLOWFISH_MCRYPT。

最新更新