15

の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つの文字が非常に重要である場合、ソルトの正しい形式は何ですか?

4

1 に答える 1

15

に続く2a数字は、実行するラウンド数の log2 を指定します。たとえば、10 は 1024 ラウンドを実行することを意味します。通常、10 が正常です。大きすぎる数字は使用しないでください。パスワードの確認に永遠に時間がかかります。

BCrypt.net GenerateSalt(31) がすぐに返される理由を参照してください。関連する何かのために。:-)

于 2010-02-08T23:27:40.403 に答える