Task Auth は、パスワードのハッシュに PHPass を使用します(古いバージョンです。これは良い兆候ではありません。インストールで更新することをお勧めします)。PHPass には、ポータブルと bcrypt の 2 つのモードがあります。
PHP のバージョンによっては、移植可能なハッシュをオンにする必要はありません。PHP 5.3 以降では、システムで使用できない場合、PHP は bcrypt の独自の実装を提供します。すべてのサーバーが PHP 5.3 以降を使用している場合は、ポータブル ハッシュをオフにすることを強くお勧めします。PHPass の「ポータブル ハッシュ」が存在するのは、インストールされている PHP のバージョンによっては bcrypt が利用できない場合があるためです。
とはいえ、PHPass ポータブル ハッシュはソルトをそのハッシュに格納します。そのため、同じパスワードで実行するたびに異なります。
また、PHPass はPHP_VERSION
これらのハッシュの生成中に*md5()
を使用して、そのバージョンで使用可能な関数がパラメーターをサポートしているかどうかを確認し$rawMode
ます。そうでない場合は、pack()
を使用して 16 進数データを 2 進数に変換します (単純$rawMode
に を使用するよりもかなり遅いことに注意してください。これが分岐が行われる理由です)。
繰り返しますが、すべてのサーバーが PHP 5.3 以降を実行している場合は、ポータブル モードをオフにして、代わりに PHPass を使用することを強くお勧めしますbcrypt
。PHP 5.3+ は、システムの実装が利用できない場合に独自の実装を提供するため、OS 間でハッシュをチェックできます。ポータブル モードをオフにしても、PHPass は古いハッシュを適切な方法でチェックするのに十分なほどスマートです。
* 131行目
EDIT:詳細については、ポータブルモードでのハッシュの生成方法を次に示します(単純化され、PHPassにある実際の変数は使用されませんが、正確です)。PHPass は独自のバージョンの base64 エンコーディングを使用することに注意してください。
$final = '$P$'
$final .= encode64_int($rounds)
(コンストラクターから、最小は PHP 5+ で 5、その他で 3)
$final .= genSalt()
(Salt は 6 バイトです...「encode64」形式の 8 バイト)。
$hash = md5($salt . $password)
2
$rounds
時間のために、$hash = md5($hash . $password)
$final = encode64($hash)
したがって、最終的なハッシュは基本的に次のとおりです。
$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0
\__________/\____________________/
\ \
\ \ Actual Hash
\
\ $P$ 9 IQRaTwmf
\_/ \ \______/
\ \ \
\ \ \ Salt
\ \
\ \ # Rounds (not decimal representation, 9 is actually 11)
\
\ Hash Header