gpt4 book ai didi

php - 使用 aes_decrypt 和 fetch_assoc

转载 作者:行者123 更新时间:2023-11-30 00:47:10 24 4
gpt4 key购买 nike

我的代码运行得很好。但后来我决定在将值存储到数据库之前对它们进行加密。我在将值存储在数据库中时使用 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_name

我想继续使用关联数组,但不想使用 $assoc_array["AES_DECRYPT(column_name, '6da6365bd886f275731d4662c0c29992fdd59a5d')"] 获取值。 6da6365bd886f275731d4662c0c29992fdd59a5d 部分是我在将值存储到数据库之前用于加密数据的 key 。

非常感谢您总是很有帮助的建议。

最佳答案

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

<小时/>

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

SELECT AES_DECRYPT(...) AS decrypted_data FROM ...

这会将列重命名为decrypted_data。 (或者任何你喜欢的东西。)

关于php - 使用 aes_decrypt 和 fetch_assoc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21272876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com