2016-09-09 7 views
2

私はまだ古いMD5アルゴリズムを使用しているデータベースを持っているので、PHPのpassword_hash関数でパスワードを更新したいと思っていました。php password_hash関数を使ってmd5パスワードを更新する

md5パスワードを持つユーザーのログインを行ったので、パスワードを更新する更新フィールドが表示されます。それはすべて動作し、データベース内に新しいハッシュ文字列が表示されます。しかし、新しいパスワードを使用してログインしたいときは、それは不可能です。

パスワードを更新するためにPDO更新クエリを使用しますが、誰でも解決策があるのでしょうか、これが可能であるかどうかを知っていますか?

ありがとうございます。 Bram。

編集:

これはパスワードの確認に使用するコードです。前述のように

if (password_verify($password, $rowofusers['passwordhere'])) { 
     //code here 
     } 
+0

「新しいパスワードを使用してログインしたい場合、それは不可能です。」ログイン時にパスワードを確認するために使用しているコードを表示しますか? –

+1

関連コードを掲載する必要があります。 – jeroen

+0

パスワードを保存するデータベースフィールドのタイプと長さはどのくらいですか? –

答えて

2

、これを行うための正しい方法は、ユーザに対して完全に透過することができ、「更新パスワードプロンプト」を要求すべきではありません。

ユーザーがログインしようとすると、次の手順でログインプロセスを変更します。

  1. チェックデシベルでハッシュはパスワードがmd5またはpassword_verifyに確認する必要があるかどうかを判断するために$2y$で始まる場合。 $2y$で始まる場合は、password_verifyを使用し、残りの手順は無視してください(の通常のログインプロセスの残りの部分はそのままです))。
  2. データベースのパスワードハッシュが$2y$で始まらない場合、まず平文パスワードをmd5ハッシュと照合して確認します。
  3. プレーンテキストのパスワードのハッシュは、データベース内のmd5ハッシュと一致するしない場合は、通常の失敗した認証プロセスを続行し、残りの手順を無視し、ここで
  4. プレーンテキストのパスワードのハッシュもしがでmd5ハッシュが一致しませんあなたのデータベースはプレーンテキストのパスワードをとり、password_hashを通して実行し、新たに生成されたBCRYPTハッシュをpassword_hashからデータベースを更新します。

データベース内のすべてのパスワードが更新され、残っているmd5ハッシュが残っていない限り、このコードをログインプロセスに保存する必要があります。ユーザーは、パスワードハッシュが更新されたことを決して知らず、完全に不要なので、パスワードを2回入力するよう求められることもありません。

+0

答えがありましたら、私はこれがうまく動作するかどうかチェックします。 –

+0

ありがとう、これは私のために働いた! –

関連する問題