0

フィールドID、ユーザー名、パスワード、ソルトを含むmysqlのテーブルがあります:

例:

ID : 1

ユーザー名: 管理者

パスワード: 11ca8949f9462890f2535c9a43ac52b8c10a9342

: 8d17f0de29daed0f3b4cd38f980683d01ec50729

ここにはない。このようなレコードの。

私の質問は次のとおりです。そのテーブル内のすべてのユーザーのパスワードを変更するにはどうすればよいですか。

ユーザーごとに新しいパスワードを作成したい。つまり、新しい SHA1 ハッシュとソルトが必要です。これどうやってするの。

ありがとう

4

3 に答える 3

3

全員に同じ固定パスワードを持たせ、ハッシュが連結されたパスワードとソルトの SHA1 チェックサムだけで構成されていると仮定すると、必要なのは次のとおりです。

UPDATE users SET password = SHA1(CONCAT('newpassword', salt));

これにより元のソルトが保持されますが (これは実際には問題ではありません)、もちろん、全員に同じパスワードを与えることは恐ろしく安全ではありません。ユーザーごとに異なるパスワードを生成する場合は、コードを生成して個別に送信する必要があります。そのコードは、個々のユーザーのハッシュ化されたパスワード エントリも更新する可能性があります。

または、列「newpassword」を一時的に追加し、その列を使用する上記と同様の UPDATE コマンドを使用してから削除することもできます。しかし、それでは新しいパスワードをユーザーに取得する方法の問題は解決しません。

于 2012-05-19T06:38:54.450 に答える
1

DB に元のパスワードが平文で保存されていない場合 (もちろん、そうすべきではありません)、ワンステップのプロセスにはなりません。

別の列を追加して、「hashtype」のような名前を付ける必要があります。この名前は、エントリが古いハッシュから新しいハッシュにアップグレードされたかどうかを示します。

次に、ログインコードで、ユーザーがパスワードを送信し、保存されたデータベースハッシュに対して正しくハッシュした後、ユーザーが入力したパスワードを使用して新しいメソッドごとに新しいハッシュを生成し、データベースのハッシュを更新し、ハッシュタイプを new に設定します.

それ以外の場合は、すべてのユーザーのパスワードをクリアし、メールなどでパスワードのリセットを強制するなど、クレイジーなことを行うことができます。

于 2012-05-19T06:32:44.900 に答える
1

ログインコードがある場合は、それをデバッグして、どのように機能するかを確認できます。適切なスクリプトを作成し、次のクエリを使用してパスワードを更新します。

update be_users set password=SHA1( CONCAT(  '$sha1',  '$newsalt' )), salt='your salt' where username='your username';

これを試して

于 2012-06-05T05:28:22.583 に答える