3

私のウェブサイトでは、次の MySQL 関数を使用してデータベースにユーザー パスワードを保存しました。

ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))

ユーザーがログインするには、データベース内の値で指定したパスワードを確認する必要があります。

私はそれがこれと同じくらい簡単だと思いました:

SELECT user FROM users WHERE id = $id AND password = ENCRYPT('$password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))

ただし、RAND() 関数が原因でこれが機能しないことが明らかになりました...

では、このパスワードを PHP (または mysql) で再作成して、暗号化されたパスワードと照合するにはどうすればよいでしょうか? crypt() または hash() を使用する必要があると思いますが、PHP を使用するか MySQL を使用するかは正直わかりません。

MySQL バージョン 5.5、PHP バージョン 5.3 を使用しています

4

1 に答える 1

3

ENCRYPT()(関数としてよく知られている)によって使用されるソルトcrypt()は、ハッシュの一部として保存され、ハッシュの一部として使用できます。

SELECT ... FROM users WHERE ... AND password = ENCRYPT('swordfish', password);

(つまり、ユーザーが入力したパスワードが「swordfish」だった場合。「password」は列名でもあるため、避けています。)

以下を確認することで、PHP で同じことを実行できます (実行する必要があります)。

crypt($user_password, $hashed_password) == $hashed_password

crypt()これは、パスワードを保存するための特に安全な方法ではないことに注意してください。詳細については、PHP パスワードの安全なハッシュとソルトを参照してください。

于 2013-05-23T01:14:21.820 に答える