b-shock. Fortress

password_hash.php

おれ、自分ではPHPerのつもりなんだが、実はPHPの記事を書くのは初めてという。 なんというグダグダw。

基本的な使い方

パスワードのハッシュにpassword_hash使ってますか?下手にmd5()だのsha1()だの使う ぐらいなら、断然これ使いましょう。
何も考えずに標準の関数使っとけば幸せ、一見安易に見えて実はベストプラクティスであるという、 実にPHPらしい関数。
以下、ハッシュの生成手順。

1
2
3
4
<?php
$cost = 10; //コスト
$password = 'YOUR_PASSWORD'; //平文パスワード
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => $cost]);

認証はこんなかんじ。

1
2
3
4
5
6
7
<?php
$password = 'YOUR_PASSWORD'; //ユーザーが入力したパスワード
if (password_verify($password, $hash)) {
//認証成功時の手順
} else {
//認証失敗時の手順
}

ラクすぎる。各関数の詳細はこちら。

ハッシュ生成ツール

で、これが本題。
管理者パスワードなんかのハッシュ生成に使えるツールを書いたです。

こんなふうに使う。

1
2
3
4
5
6
7
8
% ./password_hash.php YOUR_PASSWORD
{
"source": "YOUR_PASSWORD",
"hash": "$2y$10$d1SJDVqus8OvKeRrdnv8wuQk2TjD1QIuzBjoTEraJFGJ4M9VHge2m",
"algo": "bcrypt",
"cost": 10,
"verify": "OK"
}

YOUR_PASSWORDが、ハッシュ生成の対象となるパスワード。
必要なのは、出力されたJSONの hash 要素だけ。この内容をアプリの設定ファイルに控えて おけばよい。
あ、出力されるのはJSONだから、一部の記号(スラッシュとか)がエスケープされるので要注意。

処理内容は、ソースを見ての通りw
コスト7から始めて、0.05秒以内にハッシュ生成が完了する間はコストを1ずつ繰り上げていく。 当然、コストが高いほど強度の高いハッシュとなる。
今までほぼ毎回コスト10で、他はほとんど見たことないんだけどね。

ではまた。