簡體   English   中英

PHP Bcrypt哈希

[英]PHP Bcrypt hashing

我想使用Blowfish哈希來哈希密碼。

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

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

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,請嘗試以下操作:

 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM