我有一个奇怪的MySQL用户表问题。我很快创建了一个简化版本作为测试用例。MySQL SHA1哈希不匹配
我有以下表
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`identity` varchar(255) NOT NULL,
`credential` varchar(255) NOT NULL,
`credentialSalt` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=ucs2 AUTO_INCREMENT=2 ;
INSERT INTO `users` (`id`, `identity`, `credential`, `credentialSalt`) VALUES
(1, 'test', '7288edd0fc3ffcbe93a0cf06e3568e28521687bc', '123');
我运行下面的查询
SELECT id,
IF (credential = SHA1(CONCAT('test', credentialSalt)), 1, 0) AS dynamicSaltMatches,
credentialSalt AS dynamicSalt,
SHA1(CONCAT('test', credentialSalt)) AS dynamicSaltHash,
IF (credential = SHA1(CONCAT('test', 123)), 1, 0) AS staticSaltMatches,
123 AS staticSalt,
SHA1(CONCAT('test', 123)) AS staticSaltHash
FROM users
WHERE identity = 'test'
这给了我下面的结果
动态盐确实NOT匹配,而静态盐匹配。
这是在吹我的脑海。有人能帮我指出这个原因吗?
我的MySQL版本是5.5.29
明确的转换也似乎解决了这个问题:'SHA1(CONCAT('test',CAST(credentialSalt AS CHAR))'' – robertklep
是的,谢谢@robertklep;如果你不介意的话,我已经半盗取了你的评论。 – Ben
没有,谢谢你的详尽答案:) – robertklep