2

次のコードは、どちらの方法でも同じ暗号化されたパスワードを返します。なぜ、そしてどのようにこれを止めるのか。

$pwd = 'shits8888';
$salt = '50153fc193af9';

echo crypt($pwd,$salt)

これは同じものを返しているので、明らかに何かが欠けています

$pwd = 'shits8888hjhfgnsdkjf8744884';
$salt = '50153fc193af9';

echo crypt($pwd,$salt)
4

2 に答える 2

6

標準の DES ベースの crypt() は、ソルトを出力の最初の 2 文字として返します。また、str の最初の 8 文字のみを使用するため、同じ 8 文字で始まる長い文字列は同じ結果を生成します (同じソルトが使用されている場合)。

http://php.net/manual/en/function.crypt.php

ハッシュに使用されるアルゴリズムをさらに制御したい場合は、 mcryptをご覧になることをお勧めします。

crypt()また、 (名前にもかかわらず) は実際には文字列を暗号化せず、ハッシュを生成するだけであることにも注意してください。おそらくどこかに保存しているソルトを指定している場合は、次のようにしたほうがよい場合があります。

function my_crypt ($string, $salt) {
  return sha1($string.$salt); // ...or your hashing function of choice
}
于 2012-07-31T10:41:57.170 に答える
0

マニュアルからの参照: 標準の DES ベースの crypt() は、出力の最初の 2 文字としてソルトを返します。また、str の最初の 8 文字のみを使用するため、同じ 8 文字で始まる長い文字列は同じ結果を生成します (同じソルトが使用されている場合)。

どちらのエントリも最初の 8 文字と同じソルトを持っています。したがって、同じ結果を返す必要があります。

例えば:

echo crypt('12345678xxxxx','50153fc193af9');
echo crypt('12345678yyyyyy','50153fc193af9');

50gyRGMzn6mi6 同じソルトと同じ最初の 8 文字を共有しているため、両方とも返されます。

すべての暗号化アルゴリズムには制限があり、md5 でさえある時点で繰り返されます。

于 2012-07-31T10:46:24.107 に答える