我有一個奇怪的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