0

プログラムのログイン情報用のMySQLテーブルがあります。パスワードのデータ型はvarcharです。パスワードにログインしようとすると、小文字でも大文字でも構いません。正しい文字を入力すると、ログインします。これに対する解決策は何ですか?あなたの助けに感謝します

4

1 に答える 1

1

これは、デフォルトで mysql が大文字と小文字を区別しないために発生します。

mysql> create table foo (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, bar VARCHAR(20));
Query OK, 0 rows affected (0.12 sec)

mysql> insert into foo values ('','Hello'),('','hello');
Query OK, 2 rows affected, 2 warnings (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from foo where bar = 'hello';
+----+-------+
| id | bar   |
+----+-------+
|  1 | Hello |
|  2 | hello |
+----+-------+
2 rows in set (0.00 sec)

最も簡単なオプションは、パスワードをプレーン テキストで保存しないことです。それらを暗号化またはハッシュし、代わりにハッシュ/暗号化された値を保存します。


パスワードのハッシュを保存する簡単な方法は、組み込みmd5関数を使用することです。

mysql> SELECT MD5('secret');
+----------------------------------+
| MD5('secret')                    |
+----------------------------------+
| 5ebe2294ecd0e0f08eab7690d2a6ee69 |
+----------------------------------+
1 row in set (0.40 sec)

次に、クエリは次のようになります。

SELECT * FROM `sometable` WHERE `the_password` = MD5('secret');

これは一方向のハッシュであることに注意してください。つまりsecret、ハッシュされたバージョンから単語を実際に取得することはできません。したがって、これを使用して、たとえばユーザー登録のウェルカム メールにパスワードを表示することはできません。

MySQL は、いくつかの暗号化およびハッシュ関数をサポートしており、確認する必要があります。

于 2013-01-06T09:13:07.960 に答える