1

Blowfishハッシュを使用してパスワードをハッシュしたい。

crypt()5.3より前のPHPバージョンではサポートされていません

私のPHPバージョンは5.2.14です。Blowfishハッシュを使用するにはどうすればよいですか?Crypt_Blowfish代わりにPEARを使用できますか?

4

2 に答える 2

5

PEARのCrypt_Blowfishは、PHPのMCrypt拡張機能の代わりになることを目的としています。これは、ハッシュではなく、双方向の暗号化スキームです。bcryptはBlowfishに基づいていますが、同じものではありません。紛らわしいことに、PHP5.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'; 
于 2011-07-28T18:25:36.480 に答える
3

PEARのCrypt_Blowfishパッケージは、mcrypt拡張機能が利用可能な場合はそれを使用してblowfish暗号化を提供し、利用できない場合はphpでネイティブにblowfishアルゴリズムを実装します。他の形式の暗号化の使用にフォールバックすることはありません。

パッケージの「手書き」ドキュメントはありませんが、パッケージ自体の注釈から派生した自動生成された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を指定します。

于 2011-07-31T08:43:30.467 に答える