这是表格。
在phpmyadmin中执行的查询是
SELECT * FROM users WHERE hashed_password = '8c1017982b2032cc059203e3d83dd0ee2e7a86b3'
结果是一个空的结果集。如果查询是
SELECT * FROM users WHERE username='tt'
然后它按预期工作。
为什么?有什么明显的东西让我失踪吗? 使用php的sha1()
对密码进行哈希处理 SELECT * FROM users WHERE hashed_password LIKE '8c1017982b2032cc059203e3d83dd0ee2e7a86b3%'
给出空结果集。
“show create table users”的输出
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`hashed_password` varchar(255) NOT NULL,
`favourites` text,
`ip_address` varchar(40) DEFAULT NULL,
`enabled` tinyint(1) NOT NULL DEFAULT '1',
`trust_level` int(11) NOT NULL DEFAULT '0',
`time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1
select hashed_password, length(hashed_password) from users
的输出
答案 0 :(得分:1)
您的哈希长度为40个字符(SHA-1看起来像),而您的数据库字段包含42个字符。显然,任何42-char哈希都不会与你提供的40-char字面值相等。此外,似乎两个额外的字符位于哈希的开头(否则LIKE
技巧应该有效)。
找出为什么还有两个字符 - 插入哈希的代码可能对此有所了解。
答案 1 :(得分:0)
您可能想要尝试以下内容:
SELECT * FROM users WHERE SHA1(hashed_password) = '8c1017982b2032cc059203e3d83dd0ee2e7a86b3'