のPHPマニュアルエントリでcrypt()
提供されている情報を読みましたが、Blowfishアルゴリズムをトリガーするソルトの形式がまだわかりません。
手動入力によると、16文字の文字列の先頭として「$2$」または「$2a$」を使用する必要があります。ただし、後で示す例では、はるかに長い文字列' $2a$07$usesomesillystringforsalt$
'を使用しています。これは、提供する文字列がモデルに合うようにスライスおよびダイシングされることを示しています。
私が直面している問題は、実際にフグのアルゴvsをトリガーすることですSTD_DES
。例:
$foo = 'foo';
$salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
$hash = crypt($foo, $salt);
// $hash = $26HdMTpoODt6
そのハッシュは明らかに渦巻きではなく、実際STD_DES
にはソルトの最初の2文字だけがソルトに使用されています。ただし、PHPマニュアルの例では、ソルトは''で始まる$2a$07$
ため、これら3つの文字を同じコードに追加すると、次のようになります。
$foo = 'foo';
$salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
$hash = crypt($foo, $salt);
// $hash = $2a$07$b1b2ee48991281a439da2OHi1vZF8Z2zIA.8njYZKR.9iBehxLoIC
07$
たとえば、ここで''04$
として示されている文字に多少の差異を与えることができ、15$
両方とも機能しますが、機能01$
し03$
ない(空白の文字列を生成する)、およびなどの値を使用し99$
て、再び85$
元に戻すことができることに気付きました。 STD_DES
。
質問:
$2a$
マニュアルで信じられているように、crypt関数にblowfishメソッドを使用するように指示する''文字列に続くこれらの3文字の重要性は何ですか。
マニュアルによると、' 'はフグの方法を使用する$2a$
ように指示するのに十分なはずです。crypt()
では、次の3文字の意味は何でしょうか。では、これらの3つの文字が非常に重要である場合、ソルトの正しい形式は何ですか?