PHP查询/比较MySQL中的用户输入和aes加密数据

PHP查询/比较MySQL中的用户输入和aes加密数据,php,mysql,aes,Php,Mysql,Aes,我试图找到通过PHP查询MySQL表的正确方法,表中的字段是AES加密的。我有一个登录表单,它获取姓氏加上一些其他字段,并进行查询以进行比较。以下是相关结构的简介 我使用以下方法插入数据: AES_ENCRYPT('".$last_name."','".$encryption_key."') CAST(AES_DECRYPT(last_name, '$encryption_key') AS CHAR(66)) last_name_decrypt 我可以使用以下方法解密和输出数据: AES_

我试图找到通过PHP查询MySQL表的正确方法,表中的字段是AES加密的。我有一个登录表单,它获取姓氏加上一些其他字段,并进行查询以进行比较。以下是相关结构的简介

我使用以下方法插入数据:

AES_ENCRYPT('".$last_name."','".$encryption_key."') 
CAST(AES_DECRYPT(last_name, '$encryption_key') AS CHAR(66)) last_name_decrypt
我可以使用以下方法解密和输出数据:

AES_ENCRYPT('".$last_name."','".$encryption_key."') 
CAST(AES_DECRYPT(last_name, '$encryption_key') AS CHAR(66)) last_name_decrypt
然而,我无法与工作相比。我试过了

$query = "SELECT * from {$tablename} where last_name = AES_ENCRYPT('".$unauth_last_name."','".$encryption_key."')";

非常感谢您提供的任何帮助或指导。

我认为您缺少与php获得的姓氏的比较-可能是从登录html表单获得的。假设包含要检查的姓氏的php变量名为
$in_last_name
,查询可能如下所示:

    $query = "SELECT * from {$tablename} WHERE last_name = AES_ENCRYPT('".$in_last_name."','".$encryption_key."')";
(显然,您应该清理您的输入或使用带有参数绑定的准备语句来防止sql注入攻击。因为我不知道您使用什么API连接到MySQL,所以我无法对此提出确切的解决方案。无论如何,这超出了这个问题的范围。)

查询对输入的姓氏(纯文本)进行加密,并根据存储的加密数据进行检查。此外,
where
子句中不得有字段别名

同样,以这种方式使用字段级加密不会使数据变得安全,因为它依赖于加密密钥是机密的。这样的加密只会让你的生活更加困难


您可能希望查看MySQL中加密数据的其他方法。例如,它允许DBA管理加密数据,而不需要实际访问纯文本版本。是的,这不是一个免费的产品。

我认为您缺少与php获得的姓氏的比较-可能是从登录html表单获得的。假设包含要检查的姓氏的php变量名为
$in_last_name
,查询可能如下所示:

    $query = "SELECT * from {$tablename} WHERE last_name = AES_ENCRYPT('".$in_last_name."','".$encryption_key."')";
(显然,您应该清理您的输入或使用带有参数绑定的准备语句来防止sql注入攻击。因为我不知道您使用什么API连接到MySQL,所以我无法对此提出确切的解决方案。无论如何,这超出了这个问题的范围。)

查询对输入的姓氏(纯文本)进行加密,并根据存储的加密数据进行检查。此外,
where
子句中不得有字段别名

同样,以这种方式使用字段级加密不会使数据变得安全,因为它依赖于加密密钥是机密的。这样的加密只会让你的生活更加困难


您可能希望查看MySQL中加密数据的其他方法。例如,它允许DBA管理加密数据,而不需要实际访问纯文本版本。是的,这不是免费的产品。

感谢清理@ShadowIs
lastname
字段与
last\u name
字段(下划线)不同?如果是,那么如果姓氏也有未加密格式,那么以加密格式存储姓氏又有什么意义呢?在哪里比较php代码的输入与数据库中存储的内容?以这种方式使用字段级加密不会使数据变得安全,因为它依赖于加密密钥是机密的。您可能希望查看MySQL中加密数据的其他方法。签出:否我将修改代码,lastname应该是last_name。如果
lastname
应该是
last_name
,那么您的比较肯定会失败,因为您将加密的姓氏与未加密的姓氏进行比较。我想你错过了与php代码的比较。哦,好肉汁,我已经看这个太久了…感谢清理@ShadowIs
lastname
字段与
lastname
字段(下划线)不同?如果是,那么如果姓氏也有未加密格式,那么以加密格式存储姓氏又有什么意义呢?在哪里比较php代码的输入与数据库中存储的内容?以这种方式使用字段级加密不会使数据变得安全,因为它依赖于加密密钥是机密的。您可能希望查看MySQL中加密数据的其他方法。签出:否我将修改代码,lastname应该是last_name。如果
lastname
应该是
last_name
,那么您的比较肯定会失败,因为您将加密的姓氏与未加密的姓氏进行比较。我想你错过了与php代码的比较。哦,好肉汁,我已经看这个太久了。。。