我对存储在我的应用程序用户表中的密码实施AES加密,但是,当我运行以下查询时,我似乎无法验证用户是否存在。我无法看出它有什么问题。任何帮助将不胜感激。
SELECT * FROM user_table WHERE username='users-name' AND password=AES_DECRYPT('users-password','encryption-key');
答案 0 :(得分:1)
drop table user_table;
create table user_table
( id int auto_increment primary key,
username varchar(50) not null,
password varbinary(256) not null -- up to you, 128, 256, variable, see link below
);
insert into user_table (username,password) values ('Shahraiz T.', aes_encrypt('secret','hashedEncryptionKey'));
SELECT * FROM user_table
WHERE username='Shahraiz T.'
AND AES_DECRYPT(password,'hashedEncryptionKey')='secret';
-- hurray, 1 row
SELECT * FROM user_table
WHERE username='Shahraiz T.'
AND AES_DECRYPT(password,'hashedEncryptionKey')='imposter';
-- evil imposter, 0 rows
Mysql Encryption and Compression Functions手册页。
你所拥有的,以及你对hashedEncryptionKey
所做的事情超出了这个问题的范围。
答案 1 :(得分:0)
希望这可能有用。
首先,我选择以后需要使用的列数(帮助,用户名和密码),但在我的情况下,选择整个密码列AES_DECRYPT和单个YOUR_KEY_HERE。
通过添加WHERE username= 'admin' AND password=AES_ENCRYPT('YOUR_PASSWORD','YOUR_KEY_HERE')
,您可以在输入密码时从表单中输入加密的密码。
SELECT aid,username, AES_DECRYPT(password,'YOUR_KEY_HERE') as pwd
FROM admin_login WHERE username= 'admin' AND
password= AES_ENCRYPT('YOUR_PASSWORD','YOUR_KEY_HERE');
注意:YOUR_PASSWORD是在输入字段中输入的密码。
输出列
aid, username, pwd