2011-07-28 7 views
1

私は使用したいブローフィッシュハッシュパスワードをハッシュする。PHP Bcryptハッシング

crypt()は前5.3

への私のPHPのバージョンが5.2.14であるPHPのバージョンでそれをサポートしていません。ブローフィッシュのハッシュを使用するにはどうすればいいですか?代わりにPEARのCrypt_Blowfishを使用できますか?

+2

暗号化のための稚魚ではなく、ハッシングではありませんか? – Manhim

+0

彼はいくつかのBlowfishの部分を使っているパスワード派生体系であるbcryptを意味します。 –

+0

[PHPでパスワードをハッシュするためにbcryptを使用するにはどうすればよいですか?](http://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing-passwords-in-php) – derobert

答えて

6

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サポートが追加されます。それが利用可能である、とされていない場合、それはフグのアルゴリズムを実装している場合

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

php ['crypt()'](http://www.php.net/manual/en/function.crypt.php)関数を明確にするために、['CRYPT_BLOWFISH' ](http://www.php.net/manual/en/function.crypt.php)メソッド(リンクされたページに定義されている)は、ハッシュの4から31回の反復を持つ塩漬けのハッシュ関数です。これは双方向暗号化機能ではありません。 – eykanal

+0

Suhosinをハッシュに使用する方法に関するチュートリアルはありますか? – chnet

+0

@chnet SuhosinはPHPパッチです。PHPを保護するのに役立ついくつかのことを行うだけです。これらのうちの1つは、PHPの 'crypt()'関数でCRYPT_BLOWFISHのサポートを追加することです。アプリケーションを書くために使うものではありません。あなたが共有ホスティングをしているなら、おそらくそれをインストールすることはできません。 –

3

PEARのCrypt_Blowfishパッケージは、mcrypt拡張モジュールを使用してフグの暗号化を提供し、あなたは現在CRYPT_BLOWFISHがインストールされていないことを確認し、次を試してみ

PHPでネイティブに。他の形式の暗号化を使用することには戻りません。

パッケージには手書きのドキュメントはありませんが、パッケージ自体の注釈に由来するauto-generated API documentationがあります。

$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を指定します。

関連する問題