4

私のテストケースは次のとおりです。

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」回多く繰り返されますか?

4

4 に答える 4

1

この質問は少し古いですが、ここで内部使用のためのハッシュ クラスを作成する方法に頭を悩ませようとしたときにこれを見つけました。 4 文字の「繰り返し回数」として使用できます。可能な値は 1 ~ 16,777,215 です。

private function base64_int_encode($num){
    $alphabet_raw = "./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $alphabet = str_split($alphabet_raw);
    $arr = array();
    $base = sizeof($alphabet);
    while($num){
        $rem = $num % $base;
        $num = (int)($num / $base);
        $arr[]=$alphabet[$rem];
    }

    $arr = array_reverse($arr);
    $string = implode($arr);

    return str_pad($string, 4, '.', STR_PAD_LEFT);
}

それが誰かを助けることを願っています!

于 2013-06-07T12:32:13.973 に答える
0

拡張 DES で使用される番号システム:

.... - 0 (Extended DES error)
/... - 1
0... - 2
1... - 3
2... - 4
3... - 5
4... - 6
5... - 7
6... - 8
7... - 9
8... - 10

z... - 63
./.. - 64
//.. - 65
0/.. - 66
1/.. - 67

Y/.. - 100
61.. - 200
g2.. - 300
E4.. - 400
o5.. - 500
M7.. - 600
w8.. - 700
UA.. - 800
2C.. - 900
cD.. - 1000

zz.. - 4095
../. - 4096
/./. - 4097
0./. - 4098
1./. - 4099

xzzz - 16 777 213
yzzz - 16 777 214
zzzz - 16 777 215

そして塩に関連して:

_/...salt - 1
_0...salt - 2
_1...salt - 3
_2...salt - 4
_3...salt - 5
_4...salt - 6
_5...salt - 7
_6...salt - 8
_7...salt - 9
_8...salt - 10

_z...salt - 63
_./..salt - 64
_//..salt - 65
_0/..salt - 66
_1/..salt - 67

_Y/..salt - 100
_61..salt - 200
_g2..salt - 300
_E4..salt - 400
_o5..salt - 500
_M7..salt - 600
_w8..salt - 700
_UA..salt - 800
_2C..salt - 900
_cD..salt - 1000

_zz..salt - 4095
_../.salt - 4096
_/./.salt - 4097
_0./.salt - 4098
_1./.salt - 4099

_xzzzsalt - 16 777 213
_yzzzsalt - 16 777 214
_zzzzsalt - 16 777 215
于 2017-12-10T12:54:27.453 に答える