MySQL无法返回带有AES_ENCRYPT函数的项目

时间:2014-04-26 01:33:12

标签: mysql aes

我添加了一个带有以下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)在这种情况下会失败?

2 个答案:

答案 0 :(得分:0)

SELECT * FROM users WHERE name ='Terry' AND pass= AES_DECRYPT('32145', '32145')

MySQL Reference

答案 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');

所以你的查询应该有效。