Blowfishハッシュを使用してパスワードをハッシュしたい。
crypt()
5.3より前のPHPバージョンではサポートされていません
私のPHPバージョンは5.2.14です。Blowfishハッシュを使用するにはどうすればよいですか?Crypt_Blowfish
代わりにPEARを使用できますか?
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';
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を指定します。