Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用aes_解密并获取_assoc_Php_Mysql_Encryption_Mysqli - Fatal编程技术网

Php 使用aes_解密并获取_assoc

Php 使用aes_解密并获取_assoc,php,mysql,encryption,mysqli,Php,Mysql,Encryption,Mysqli,我的代码工作得很好。但后来我决定在将值存储到数据库之前对其进行加密。在数据库中存储值时,我使用aes_encrypt对值进行加密。从数据库检索/选择时,我使用aes_decrypt对值进行解密。这允许我使用列名作为关联数组的元素,但现在元素名都搞乱了。这是我的密码: $databaseObject = connectToDB(); $result = $databaseObject->query("SELECT AES_DECRYPT(column_name, '".ENCRYPT_KEY

我的代码工作得很好。但后来我决定在将值存储到数据库之前对其进行加密。在数据库中存储值时,我使用aes_encrypt对值进行加密。从数据库检索/选择时,我使用aes_decrypt对值进行解密。这允许我使用列名作为关联数组的元素,但现在元素名都搞乱了。这是我的密码:

$databaseObject = connectToDB();
$result = $databaseObject->query("SELECT AES_DECRYPT(column_name, '".ENCRYPT_KEY."') FROM tempTable WHERE `id` = 3");
$assoc_array = $result->fetch_assoc();
var_dump($assoc_array);
echo $assoc_array['column_name'];
此代码输出以下内容:

array(1) { ["AES_DECRYPT(column_name, '6da6365bd886f275731d4662c0c29992fdd59a5d')"]=> string(7) "siracha" } siracha
列中的值为
siracha
,列名为
column\u name

我想继续使用关联数组,但我不想使用
$assoc_数组[“AES_DECRYPT(列名,'6da6365bd886f275731d4662c0c29992fdd59a5d')”]
来获取值。
6da6365bd886f275731d4662c0c29992fdd59a5d部分是我在将值存储到数据库之前用于加密数据的密钥


非常感谢您的建议。

首先:不要在MySQL中进行加密。将加密密钥传递给数据库引擎是不安全的,因为这很容易导致您的加密密钥出现在web服务器日志中的输出网页中(例如,如果您的PHP应用程序显示查询内容)(特别是
错误日志
),或在MySQL语句或二进制日志中。如果您的MySQL服务器不在本地计算机上,它还将通过未加密的网络传输您的加密密钥,并在运行此查询时在MySQL服务器上的
SHOW PROCESSLIST
中将其公开。使用固定密钥也几乎不可能更改加密简而言之,这是一种非常糟糕的安全做法。在应用程序中加密,而不是在数据库中加密


现在我已经解决了这个问题,您需要的是
AS
列修饰符:

SELECT AES_DECRYPT(...) AS decrypted_data FROM ...
这将把列重命名为
解密的\u数据
(或您喜欢的任何内容)