一个奇怪的问题不知道怎么解决。我无法根据数据库中存储的散列密码验证用户密码
在mysql中,在插入用户数据之前,我先对密码进行哈希运算,然后将其存储在用户表中。但是,当用户尝试使用相同的密码登录时,我会检查用户的密码,然后将其与用户表中已哈希运算的密码进行哈希运算,结果不一样
这是扳机
DELIMITER $$
DROP TRIGGER IF EXISTS validateNewUserInsert$$
CREATE DEFINER=`evolve`@`localhost` TRIGGER `validateNewUserInsert`
BEFORE INSERT ON user FOR EACH ROW
BEGIN
CALL validateNewUser(NEW.username, NEW.user_email);
SET NEW.password = sha2(123, 256);
END$$
DELIMITER ;
例如:“123”的触发器中散列的结果是a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa
select sha2('123', 256);
但在触发器外对同一输入“123”进行哈希运算时的结果是a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
不一样为什么?当用户试图登录时,如何验证用户输入
1条答案
按热度按时间p5fdfcr11#
你需要检查一下
NEW.password
结果在你的trigger
是a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa型
从
sha2
是a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3型
第一个字符串的长度是45,第二个是64,而且第一个字符串是第一个字符串的子字符串,所以需要检查
NEW.password
由于其长度限制,已截断该值