明日になったら本気出せる

底辺Web系エンジニアの日記

PHP5.5で追加されたpassword_verifyが動かないと思ったら・・・[php]

動作の確認でコード書いてたらpassword_verifyが正しく動かない。
と、思ったらあまりにアホらしいことが原因だった。

とりあえずpassword_hash関数でハッシュを作る。

<?php
$password = 'password';
var_dump(password_hash($password, PASSWORD_DEFAULT));
var_dump(password_hash($password, PASSWORD_DEFAULT));
var_dump(password_hash($password, PASSWORD_DEFAULT));

実行結果

string(60) "$2y$10$cqC784fBoXENAPQ6H9fq8u1peuGfV2cOAah9RDRz3O8/0l1M8udOC"
string(60) "$2y$10$2wrMKhfTuZ9.3E5/aSW/ju6mJM7zmj3Jd9FCUlP02ru/yeYOb/4Jm"
string(60) "$2y$10$yzxx3193FlIidR.4.mQ8..AxC7AV/7q81lS2eODh2kEbebcg5NiSi"

なるほどねー。と思って下のコードで検証。

<?php
$password = 'password';
var_dump(password_verify($password, "$2y$10$cqC784fBoXENAPQ6H9fq8u1peuGfV2cOAah9RDRz3O8/0l1M8udOC"));
var_dump(password_verify($password, "$2y$10$2wrMKhfTuZ9.3E5/aSW/ju6mJM7zmj3Jd9FCUlP02ru/yeYOb/4Jm"));
var_dump(password_verify($password, "$2y$10$yzxx3193FlIidR.4.mQ8..AxC7AV/7q81lS2eODh2kEbebcg5NiSi"));

実行結果

bool(false)
bool(true)
bool(false)

なぜか動かない。「php password_verify not working」がgoogleの検索候補に出てきてみんなそんなこと思ってるのかなぁと思ったら、すげーアホらしいミスだった。

<?php
$password = 'password';
var_dump(password_verify($password, '$2y$10$cqC784fBoXENAPQ6H9fq8u1peuGfV2cOAah9RDRz3O8/0l1M8udOC'));
var_dump(password_verify($password, '$2y$10$2wrMKhfTuZ9.3E5/aSW/ju6mJM7zmj3Jd9FCUlP02ru/yeYOb/4Jm'));
var_dump(password_verify($password, '$2y$10$yzxx3193FlIidR.4.mQ8..AxC7AV/7q81lS2eODh2kEbebcg5NiSi'));

実行結果

bool(true)
bool(true)
bool(true)

はい、正しく動きました。

ここまでで大抵のぺちぱーのみなさんは分かると思いますが、分からない人の為にヒント。

<?php
var_dump("$2y$10$cqC784fBoXENAPQ6H9fq8u1peuGfV2cOAah9RDRz3O8/0l1M8udOC");
var_dump('$2y$10$cqC784fBoXENAPQ6H9fq8u1peuGfV2cOAah9RDRz3O8/0l1M8udOC');

var_dump("$2y$10$2wrMKhfTuZ9.3E5/aSW/ju6mJM7zmj3Jd9FCUlP02ru/yeYOb/4Jm");
var_dump('$2y$10$2wrMKhfTuZ9.3E5/aSW/ju6mJM7zmj3Jd9FCUlP02ru/yeYOb/4Jm');

var_dump("$2y$10$yzxx3193FlIidR.4.mQ8..AxC7AV/7q81lS2eODh2kEbebcg5NiSi");
var_dump('$2y$10$yzxx3193FlIidR.4.mQ8..AxC7AV/7q81lS2eODh2kEbebcg5NiSi');

こいつの実行結果は下記(間を空けて見やすくしてます)

string(16) "$2y$10/0l1M8udOC"
string(60) "$2y$10$cqC784fBoXENAPQ6H9fq8u1peuGfV2cOAah9RDRz3O8/0l1M8udOC"

string(60) "$2y$10$2wrMKhfTuZ9.3E5/aSW/ju6mJM7zmj3Jd9FCUlP02ru/yeYOb/4Jm"
string(60) "$2y$10$2wrMKhfTuZ9.3E5/aSW/ju6mJM7zmj3Jd9FCUlP02ru/yeYOb/4Jm"

string(45) "$2y$10.4.mQ8..AxC7AV/7q81lS2eODh2kEbebcg5NiSi"
string(60) "$2y$10$yzxx3193FlIidR.4.mQ8..AxC7AV/7q81lS2eODh2kEbebcg5NiSi"

プレビューして分かったんだけどはてぶのシンタックスハイライトすごいね。どこが変数展開されてるか一目瞭然だ!

変数展開しようとしてそんな変数ないから NULL => 空文字 って具合になってるんだろうね。