1

この目的のために password_hash メソッドをテストしようとしています。次の関数hashPasswordを作成しました。

function hashPassword($string) {
    $settings = array('cost' => 10, 'encryption_key' => 'thisIsMyEncryptionKey1234');
    return password_hash($string, PASSWORD_BCRYPT, $settings);
}

これを次のようなランダムな文字列でテストすると"test"

結果は次のようになります。

$2y$10$thisIsMyEncryptionKeyu5n3NNnKh3DjgJqgb5pE8YOLBclKrVWC

または、次のようにテストした場合helloworld:

$2y$10$thisIsMyEncryptionKeyuVw8QRVNw8HbEWHX2oQlArVtne2TzOpS

なぜこれが起こっているのか誰にも教えてもらえますか?それともこんな感じでいいのでしょうか?

4

2 に答える 2

6

よほどの理由がない限り、暗号化キーを手動で入力しないでください。ドキュメントをpassword_hashさらに読むことをお勧めします。

適切に使用すると、システムがすべてを独自に把握できるようになります。

function hashPassword($password)
{
    return password_hash($password, PASSWORD_DEFAULT);
}

次に、PHP は現在のハードウェアに最適な利用可能なアルゴリズムと最も適切な反復回数を内部的に選択し、安全で一意のソルトを生成します。

パスワードを検証するには、 を使用password_verifyし、Userクラスなどで必要な再ハッシュを確認します。

class User
{
    ...

    public function verifyPassword($password)
    {
      if(!password_verify($password, $this->hash))
        return false;
      if(password_needs_rehash($this->hash, PASSWORD_DEFAULT))
        $this->setNewHashAndSaveToDB(password_hash($password, PASSWORD_DEFAULT));
      return true;
    }
}

この構成を使用することで、ハッシュされたパスワードが常に最新の状態に保たれ、ユーザーのログイン時に自動的にハードウェアの容量が増加しても安全に保たれます。

どのアルゴリズムをPASSWORD_DEFAULT選択し、どの構成を使用するかに関するポリシーは次のとおりです。

この関数によってサポートされるアルゴリズムの更新 (またはデフォルトのアルゴリズムへの変更) は、次の規則に従う必要があります。

  • 新しいアルゴリズムは、デフォルトになる前に、PHP の少なくとも 1 つのフル リリースのコアに含まれている必要があります。したがって、たとえば、新しいアルゴリズムが 5.5.5 に追加された場合、5.7 までデフォルトの対象にはなりません (5.6 が最初の完全なリリースになるため)。ただし、5.6.0 で別のアルゴリズムが追加された場合は、5.7.0 でもデフォルトの対象になります。
  • デフォルトは、リビジョン リリースではなく、完全なリリース (5.6.0、6.0.0 など) でのみ変更する必要があります。これに対する唯一の例外は、現在のデフォルトに重大なセキュリティ上の欠陥が見つかった緊急時です。
于 2014-01-04T14:44:55.300 に答える
1

About暗号化キー:

最適な暗号化キーは、信頼できる乱数ジェネレーターから生成されるバイナリ BLOB です。次の例をお勧めします (>= 5.3)。

$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CFB);
$encryptionKey = openssl_random_pseudo_bytes($key_size, $strong); //$strong will be true if the key is crypto safe

しかし、あなたの場合、文字列を設定するだけで、これにはランダムなデータを使用してください。

于 2014-01-04T14:48:39.537 に答える