2016-04-27 11 views
4

私はこのウェブサイトをシンプルなCMSで作成しています。ユーザーが登録すると、パスワードはMD5で暗号化されます。データベースユーザーを失うことなくハッシュを変更する

しかし、私はこの暗号化が気に入らず、すでにCMSを再構築していたので、ハッシュも変更しました。

データベースユーザーを失うことなく、別の暗号化方式でMD5を変更する方法はありますか?

+1

古いメソッドと新しいハッシュを持つ2つのカラムを使用すると、すべてのユーザが新しいメソッドで再びうっとりすることがあります。 –

+3

https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016-ハッシュの更新に関する最後のセクションがあります。 – iainn

+1

パスワードリセット機能がある場合。すべてのユーザーに新しいハッシング方法でパスワードをリセットするよう依頼する – Matt

答えて

4

あなたは、データベースに3つの新しい列を追加することができます。

newPasswordnewSaltisRequiredここ

これはハッシュの更新以来の最初のログインの試みである場合は(password_hash PHPSのようなハッシング使用している場合)、新しいハッシュされたパスワードを新しいパスワードによって作成された新しい塩を保存することができ。

方法

あなたはisRequiredがYESであるかどうかを確認するためにログインスクリプトを変更する必要があります。古いハッシュされたパスワードと古い塩を引き出す場合は、新しいパスワードと新しい塩を使用します。

現在のユーザであれば、isRequiredをYESに設定してください。

ユーザーのログイン時に、isRequiredの値がYESの場合は、ユーザーをパスワードリセットページにリダイレクトします。それ以外の場合は、通常どおりに続行します。

このパスワードリセットページは基本的に新しい登録ページですが、現在のユーザー用に変更されているため、データの取り扱い方法に応じて新しいユーザー名などを作成する必要はありません。

ユーザーが自分のパスワードをリセットします

が、これは、新しいユーザーのために

..新しい方法でハッシュされ、「新しい」セクションに通常通りデータベースに格納され、NOにisRequired値を設定します登録ページがパスワードをnewPassword列に入れて、isRequiredをNOにしてください。すべてisRequired値がNOのときライン

ダウン

は最終的に、あなたはそれ以上使用されていないすべての古い列を削除するには、データベースやコーディングを更新することはできない、などのMD5ハッシュに関連するすべてのコードを削除

まだ古いパスワードを変更していないユーザーがいる場合は、そのユーザーを削除して再登録することができます。おそらく、すべてのユーザーに電子メールを送信して、x日前にパスワードを更新していないと、データが削除され、登録を再度行わなければならないと言っています。

+0

あなたは本当にパスワードハッシュに自分の塩を使うべきではありません。本当にPHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使ってパスワードセキュリティを処理するべきです。ハッシュする前に[パスワードをエスケープしない](http://codereview.stackexchange.com/questions/79668/login-with-password-hash)か、他のクレンジングメカニズムを使用していることを確認してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –

+0

@JayBlanchard私が自分のsaltと言うとき、私は '$ random_salt = mcrypt_create_iv(24、MCRYPT_DEV_URANDOM); 'のようなものを作成することを意味します。 – Matt

+0

PHP関数にはランダムな塩生成器が組み込まれており、追加のコードがあります。 –

2

MD5は暗号化ではなくハッシュです。それはデータ全体を保持しません - データの識別子のように機能します。だから、それは解読できません。したがって、基本的に、既存のユーザーのパスワードを自分の暗号化に変更することはできません。研究のため

より:パスワードが保存されている場所

http://en.wikipedia.org/wiki/MD5#Algorithm

https://stackoverflow.com/a/2717958/926943

関連する問題