mysql select returns sha1 散列密码为空

mysql select returns empty on sha1 hashed password

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

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

当我想 select 一行时,就像使用 :

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

结果是:

 Empty set (0.00 sec)

但如果我尝试 select 使用 用户名 :

select * from tbl_user where username  = 'maysam';

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

有什么问题?为什么它不能 select?(我已经使用 md5 和 sha2 测试了散列和 selecting....

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

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

顺便说一句,未加盐的 SHA1 哈希是一种非常弱的密码存储方式。更喜欢 bcrypt 或 scrypt 之类的东西。