1

crypt 値が Ubuntu PHP 5.3.6 で一致しないのはなぜですか? 他のシステムでは、それらは一致します。

サンプルコード:

<?php

$password = '12345';

$saltString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$salt = '_';
while (strlen($salt) < 9)
    $salt .= substr($saltString, rand(0, strlen($saltString)-1), 1);
$cryptedPassword = crypt($password, $salt);

printf("Password: %s\n", $password);
printf("Crypted Password: %s\n", $cryptedPassword);

$cryptCompare = crypt($password, $cryptedPassword);

printf("Crypted Password Comparison: %s\n", $cryptCompare);

?>

Password: 12345
Crypted Password: _8OixMoOTyONAZDOiHbs
Crypted Password Comparison: _8IK4dGYmlkVo
4

2 に答える 2

1

crypt戻り値の前に追加されたソルト値を返すことになっていると思います。一部の実装では、明らかに 2 バイトしかありません (定数 CRYPT_SALT_LENGTH で確認できます)。OPに出力された出力を見ると、2つの「暗号化された」文字列の類似性は最初の2バイトに限定されています。おそらく実装に欠陥があり、ソルトに 2 バイト以上を使用しているのに、結果としてソルトの最初の 2 バイトしか返されない可能性があります。もしそうなら、それは違いを説明するでしょう。ソルトの長さを 2 に設定するだけで、それをテストできます。

そうは言っても、別のハッシュ関数の使用を検討することをお勧めします。私は PHP についてほとんど知りませんが、少しグーグルで調べてみると、crypt は時代遅れであり、あまり安全ではないことがわかります。たとえば、これはそのような投稿の 1 つです。

于 2012-02-10T21:22:54.790 に答える