Php5.5がインストールされたXAMPPを使用してサイトを開発しました。私のホストにはphp5.4しかないことに気づきました(まだ5.5に更新できません)。私の問題は、新しいphp 5.5 password_hash()
機能を使用できないことです。 PHP 5.4のsaltでハッシュするための同等の方法はありますか?
この同等のコード(下記)をphp 5.4で動作させる方法はありますか?
$options = [
'salt' => uniqid(mt_Rand(), true),
'cost' => 12
];
$hash = password_hash($mypassword, PASSWORD_DEFAULT, $options);
password_compat を使用します。これは、古いバージョンのPHP(5.3.7+)で password_hash()
をエミュレートする下位互換性のあるライブラリです。
PHP 5.4を使用していたとき、phpの crypt function をCRYPT_BLOWFISHハッシュタイプで使用しました。あなたのケースに一致するようにパラメーターを少し試してみて、あなたのblowfish Pre
は、$2y$12$
パラメータと一致するようにcost = 12
である必要があります。
コマンドラインでこのスクリプトを実行して、結果が一致することを確認できます(この部分では安全でないmt_Randソルトを保持します。これについては後で詳しく説明します)
<?php
$salt= uniqid(mt_Rand(), true);
$options=['salt'=>$salt, 'cost'=>12];
$mypassword=$argv[1];
$cryptpwd=crypt($mypassword,'$2y$12$'.$salt.'$'); // PHP 5.4 style
$pwdhash=password_hash($mypassword, PASSWORD_DEFAULT, $options); // PHP 5.5+
echo "\n";
echo 'CRYPT :'. $cryptpwd;
echo "\n";
echo 'PWD HASH :'. $pwdhash;
echo "\n";
if($cryptpwd===$pwdhash) {
echo 'Hashes match!';
} else {
echo 'Hashes do not match';
}
echo "\n";
例えば
php pwd.php 1q2w3e4r5t
出力
CRYPT :$2y$12$22253563353f27f9b3292ereZv98r1iFQhItfYT0UbKaejMSJThBi
PWD HASH :$2y$12$22253563353f27f9b3292ereZv98r1iFQhItfYT0UbKaejMSJThBi
Hashes match!
十分にテストされたライブラリを使用する方が安全であるため、@ JohnCondeの答えの方が優れています。トランクの下で何が起こっているのか見たかっただけです。
PD:あなたは尋ねました
この同等のコード(下記)をphp 5.4で動作させる方法はありますか?
これで、コードに大きな弱点があります。 mt_Randでソルトを生成しています。 絶対にしないでください。ソルト生成を使用してシステムを信頼し、本当に自分で生成したい場合は、次のソルトジェネレーターのようなものを使用します(アプリがPHP 5.4)のときにこれを使用しました)
$Allowed_Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./';
$Chars_Len = 63;
$Salt_Length = 21;
$salt = "";
$Blowfish_Pre='$2y$12$';
$Blowfish_End='$';
for ($i = 0; $i < $Salt_Length; $i++) {
$salt.= $Allowed_Chars[mt_Rand(0, $Chars_Len) ];
}
$bcrypt_salt = $Blowfish_Pre . $salt . $Blowfish_End;
正直なところ、ソルトには18文字あると確信していましたが、古いコードを見ると、21文字で完了しています:)