我添加了一个带有以下SQL语句的项目:
INSERT INTO `db`.`users` (`name`, `pass`) VALUES ('Terry', AES_ENCRYPT('32145', '32145'))
然后,新的行被添加到表中,当然。
当我尝试使用'name'和'pass'查找此项时,返回了一个空集。查询语句如下:
SELECT * FROM `users` WHERE `name` ='Terry' AND `pass`= AES_ENCRYPT('32145', '32145')
AES_ENCRYPT功能有什么问题吗? : - (
2014年4月27日更新:
“通行证”的类型定义为varchar(255)
,结果证明是一场灾难。 : - (
我将其类型修改为varbinary(255)
后,一切正常。
原来的问题已经解决了。但是,为什么类型varchar(255)
在这种情况下会失败?
答案 0 :(得分:0)
SELECT * FROM users WHERE name ='Terry' AND pass= AES_DECRYPT('32145', '32145')
答案 1 :(得分:0)
请参阅此fiddle和aes_encrypt documentation。
您的pass
列是什么类型的?我把它定义为小提琴:
pass varbinary(200)
这是否成功插入:
INSERT INTO users (name, pass) VALUES ('Terry', aes_encrypt('32145', '32145'))
然后这样查询:
select *
from users
where name = 'Terry' and pass = aes_encrypt('32145', '32145');
select *, aes_decrypt(pass, '32145')
from users
where pass = aes_encrypt('32145', '32145');
所以你的查询应该有效。