人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP の「password_hash」を用いた時のハッシュ文字列の種類は何でしょうか? (「半角大文字と小文字のアルファベット」と「半角数字」と「.」と「$」かなと思うのですが...違うでしょうか?)

// 使用例
$options = ['cost' => 12];
$hash = password_hash($pass, PASSWORD_BCRYPT, $options);

●質問者: tsuka115
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ぽけっとしすてむ
●300ポイント ベストアンサー

password_hashから返却される値の出現する文字列の範囲は

./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

のようです。
この範囲外の文字列、例えば「"'」などのコード内に含めると都合の悪いコードや「❔」といったマルチバイト文字・絵文字は出現しないものになります。

正確な範囲を確認するにはソースコードを読むことが望ましいですが、ちょっとしたコードを書いて検証する事もできます。
(処理速度を調べるコードに一工夫をして、確認するコードを追加してみましょう。)


PHP5.3.2にて SHA-256 および SHA-512 が追加された際の説明に、実装の基となったものが紹介されています。
PHP: crypt - Manual

GitHubにてソースコードを検索することもできます。
php/php-src - GitHub


a-kuma3さんのコメント
https://github.com/php/php-src/blob/master/ext/standard/password.c#L477 >|perl| hash_format_len = snprintf(hash_format, sizeof(hash_format), "$2y$%02" ZEND_LONG_FMT_SPEC "$", cost); ||< ↑が頭につくみたいなので、"$" も入ります。

tsuka115さんのコメント
どうもありがとうございます。 超泥臭く1000回テストしてみて 出現した文字は下記でした。 $/.0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ なお質問の中の「使用例」以外の設定で行ったら違うかもです。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ