我正在测试使用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 ....
答案 0 :(得分:2)
sha1散列是160位,即以这种方式格式化时为40个字符。
您的表似乎将密码列的长度设置为小于此值,因此数据在插入时被截断,不再等于sha1('21f892')
。
另外,未加盐的SHA1哈希是一种存储密码的非常弱的方法。喜欢像bcrypt或scrypt这样的东西。