web-dev-qa-db-ja.com

php 5.4と同等のpassword_hash?

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);
10
bagofmilk

password_compat を使用します。これは、古いバージョンのPHP(5.3.7+)で password_hash() をエミュレートする下位互換性のあるライブラリです。

19
John Conde

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文字で完了しています:)

5
amenadiel