私のテストケースは次のとおりです。
echo crypt('string', '_....salt');//error
echo crypt('string', '_A...salt');//fast
echo crypt('string', '_AAAAsalt');//slow
http://www.php.net/manual/en/function.crypt.phpに記載されている説明:
CRYPT_EXT_DES - 拡張 DES ベースのハッシュ。「salt」は、アンダースコアとそれに続く 4 バイトの繰り返しカウントと 4 バイトのソルトで構成される 9 文字の文字列です。これらは、印刷可能な文字として、1 文字あたり 6 ビット、最下位文字が最初にエンコードされます。0 ~ 63 の値は、「./0-9A-Za-z」としてエンコードされます。ソルトで無効な文字を使用すると、crypt() が失敗します。
ドットは印刷可能な文字ですが、なぜエラーが返されるのでしょうか? そして、使用された文字に適用される「順序」は、「A...」よりも「AAAA」回多く繰り返されますか?