2013-01-06 89 views
0

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

+2

更详细些。你的问题含糊不清! –

+1

不要将密码保存为纯文本 – Popnoodles

回答

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,你应该检讨。

+0

首先,感谢您answer.I'm新的Java和MySQL.can您张贴如何加密或哈希他们店? :) –