【问题标题】:password error...?密码错误...?
【发布时间】:2013-01-06 09:06:32
【问题描述】:

我有一个 MySQL 表用于我的程序的登录信息。密码数据类型是 varchar。当我尝试登录我的密码时,它并不关心我的字符是小写还是大写。如果我输入正确的字母,它会登录。对此有什么解决方案?非常感谢您的帮助

【问题讨论】:

  • 更详细。你的问题很模糊!
  • 不要将密码存储为纯文本

标签: mysql login passwords case


【解决方案1】:

这是因为默认情况下mysql是case insensitive:

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 支持一些encryption and hashing functions,您应该查看它们。

【讨论】:

  • 首先,谢谢你的回答。我是Java和MySQL的新手。你能发布如何加密或散列它们并存储吗? :)
猜你喜欢
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
相关资源
最近更新 更多