この関数の基本を理解する必要があります。php.net のドキュメントには、blowfish アルゴリズムについて次のように記載されています。
「$2a$」、2 桁のコスト パラメータ、「$」、およびアルファベットの 22 個の base 64 桁「./0-9A-Za-z」のソルトを使用したフグのハッシュ。ソルトでこの範囲外の文字を使用すると、crypt() は長さゼロの文字列を返します。
したがって、これは定義上、機能しないはずです。
echo crypt('rasmuslerdorf', '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringforsalt$');
ただし、次のように吐き出します。
$2a$07$usesomadasdsadsadsadaeMTUHlZEItvtV00u0.kb7qhDlC0Kou9e
crypt() がソルト自体を 22 の長さにカットしたように見える場所。誰かがこれを説明してくれませんか?
私が理解できないこの関数の別の側面は、crypt() を使用してパスワードを比較する場合です。http://php.net/manual/en/function.crypt.php (例 #1 を参照)。これは、すべてのパスワードを暗号化するために同じソルトを使用する場合、最初に暗号化する必要があるということですか? すなわち:
$salt = "usesomadasdsadsadsadae";
$salt_crypt = crypt($salt);
if (crypt($user_input, $salt) == $password) {
// FAIL WONT WORK
}
if (crypt($user_input, $salt_crypt) == $password) {
// I HAVE TO DO THIS?
}
御時間ありがとうございます