mysql select在sha1哈希密码上返回空

时间:2016-02-05 16:31:02

标签: mysql sha1

我正在测试使用sha1进行哈希并且我插入了一行:

insert into tbl_user (username, password, email) values ('maysam', sha1('21lf892'), 'gerdakan.sa@gmail.com');

当我想选择一行时使用:

select * from tbl_user where password = sha1('21lf892');

结果是:

 Empty set (0.00 sec)

但如果我尝试选择使用用户名

select * from tbl_user where username  = 'maysam';

+----+----------+--------------------------------+-----------------------+
| id | username | password                       | email                 |
+----+----------+--------------------------------+-----------------------+
|  2 | maysam   | dd989b1d1d67c6e706852024ccb6a1 | gerdakan.sa@gmail.com |
+----+----------+--------------------------------+-----------------------+

有什么问题?为什么它不能选择?(我已经测试过散列并选择使用md5和sha2 ....

1 个答案:

答案 0 :(得分:2)

sha1散列是160位,即以这种方式格式化时为40个字符。

您的表似乎将密码列的长度设置为小于此值,因此数据在插入时被截断,不再等于sha1('21f892')

另外,未加盐的SHA1哈希是一种存储密码的非常弱的方法。喜欢像bcrypt或scrypt这样的东西。