0

私が使用していた:

function generateHash($password) {
    if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
        $salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
        return crypt($password, $salt);
    }
}

パスワードのハッシュには使用できますが、5.3.7 より前の PHP バージョンとは互換性がありません。そこで、パスワードを生成して検証するためのこの小さな関数を作成しました。しかし、私はセキュリティの専門家ではないので、それが非常に安全なのか、それともまだ安全でないのかを知りたいのです。

私の機能:

//$hash variable is also used to check weather we are creating or verifying passwords.
function password($password,$hash=FALSE){

    $salt=array("hfuiliffa","wiaelfbs","usfewl","fr6j5","gwg8","bs4$","fgthwv");//An array of salts
    if ($hash){
        foreach ($salt as $s1)
            foreach ($salt as $s2)
                if ($s1.sha1($s2.$password)===$hash)
                return true;

        return FALSE;//If we are still here means time to return false.
    }else {
        return $salt[array_rand($salt)].sha1($salt[array_rand($salt)].$password);
    }
}
4

1 に答える 1

0

あなたができる最善のことは、新しい関数password_hash()を使用することです。ご存じのように、PHP バージョン 5.3.7 で動作する互換パックがあります。上向き。

PHP の下位バージョンを本当にサポートする必要がある場合は、crypt パラメータを「$2y$%02d$」から「$2a$%02d$」に置き換えることができます。これにより、BCrypt ハッシュも生成されます。古いバージョンでできる最善の方法です。または、私のホームページのサンプル コードをご覧ください。

if (version_compare(PHP_VERSION, '5.3.7') >= 0)
  $algorithm = '$2y$%02d$'; // BCrypt, with fixed unicode problem
else
  $algorithm = '$2a$%02d$'; // BCrypt

絶対に PHP 4.x をサポートする必要がある場合は、BCrypt のサポートはありません。この場合、phpassライブラリを使用することをお勧めします。ところで、一定の「塩」を使用したスキームでは、ほとんど保護されません。

于 2014-04-02T08:08:44.393 に答える