在触发器中散列值与在触发器外散列值不同

9w11ddsr  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(366)

一个奇怪的问题不知道怎么解决。我无法根据数据库中存储的散列密码验证用户密码
在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
不一样为什么?当用户试图登录时,如何验证用户输入

p5fdfcr1

p5fdfcr11#

你需要检查一下 NEW.password 结果在你的 trigger
a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa型
sha2
a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3型
第一个字符串的长度是45,第二个是64,而且第一个字符串是第一个字符串的子字符串,所以需要检查 NEW.password 由于其长度限制,已截断该值

相关问题