2016-10-23 1 views
4

私は、php mcryptは非難されていると言われました。私はパスワードをハッシュして塩をかけるために別の方法を使うべきです。mcryptは推奨されていませんか? PHPでパスワードを正しく暗号化して保存するには?

これは私が現在何をすべきかです:

public function saveNewUser(array $data) { 
    $passwd = $this->mysqli->real_escape_string($datas['passwd']); 
    $options = [ 
     'cost' => 11, 
     'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) 
    ]; 

    $hashed_passwd = password_hash($passwd, PASSWORD_BCRYPT, $options); 
    $this->optin_hash = md5(rand()); 
    //... 
    //save user in DB with hashed passwd 

ログイン:

if (password_verify($_POST['user_password'], $result_row->gmw_usr_passwd)) {//do some login stuff} 

1)パスワードを暗号化、保存するために、最新かつ最も安全な方法は何ですか? 使用例を教えてください。または、パスワードを正しく暗号化して保存するにはどうすればいいですかログインの確認方法?私はpassword_hashについて何か読み、PHPのドキュメンタリーで

2):

password_hash()は、強力な一方向ハッシュアルゴリズムを使用して新しいパスワードのハッシュを作成します。 password_hash()はcrypt()と互換性があります。したがって、crypt()によって作成されたパスワードハッシュをpassword_hash()とともに使用することができます。

(...)

塩のオプションはPHP 7.0.0で廃止された 警告。既定で生成される塩を単に使用することが今や好ましい。

2.a)password_hashは私が使用したものの代わりですか?

2.b)私は自分で塩を加える必要はありませんか?

2.c)私が使ったブローフーズの栄養と私が追加した他のステップはどうでしたか?もう必要ないのですか?

2.d)password_hashを使用すると、ログインのパスワードを確認する方法を教えてください。

EDIT:申し訳ありません私は既にpassword_hashを使用しています(これは非常に短いコーディングナイトでした)。

Artjom Bで説明したように、私は、mcryptのを必要としない(?)

+1

ランダムバイトを生成するためにmcryptは必要ありません。OpenSSL拡張機能にも同様の機能があります。 –

+0

このオプションを削除するだけですか?私は代わりにこれを使用します:$ options = ['cost' => 11]; –

+1

さて、それはあなたが塩のために持っている要件に依存します。あなたが実際にデフォルトと異なる特定の長さの塩が必要な場合は、単純にデフォルトを使用することはできません。しかし、デフォルトは完全にうまく、私はそれを使用しない理由がないと思う。 –

答えて

5

新しい標準的な方法は、PHP 7.0のPHPのドキュメントによると、ログイン時に元のパスワードと、その後password_verifyをハッシュするpassword_hashを使用することです提供されたパスワードの正しさを検証することができます。

これらの関数は、crypt()のような基本を包むラッパーで、塩を生成するための正しい乱雑さのソースを選択するような、あなたと私が決して考えないことを処理するため推奨されます。暗号化には標準のrand関数を使用します)。

2bになると残りの部分は、PHPで生成されパスワードに含まれているので、自分でsaltを追加する必要はなく、すべての必要な手順が実行されます。

password_verifyを使用して作成したハッシュされたパスワードをデータベースに保存してから、ログイン時にpassword_verifyを使用してユーザーが入力したパスワードと比較するだけで済みます。

また、はい、それはもはや更新されていないので廃止予定です。

+0

あなたの説明をありがとう! 私は上記のように: この行を削除するだけです: 'salt' => mcrypt_create_iv(22、MCRYPT_DEV_URANDOM) それはそれですか? –

+0

または単に私は:password_hash($ passwd)を使用すると完了ですか? –

+3

コストを使い続けるには、塩分に関する行を削除して、コストについての行を削除するだけです。また、私はあなたがPASSWORD_BCRYPTが実際にブローフィッシュを使用していることを知っているとは確信していないので、PASSWORD_DEFAULTはすでにbcryptであり、md5やshaのような単純なハッシュ関数ではありません。だから、あなたはpassword_hash($ passwd、PASSWORD_DEFAULT)を使うことができます。 – gabriele

関連する問題