【发布时间】:2018-02-27 02:18:10
【问题描述】:
问候 Stack Overflow 社区,
我正在开发一个将数据输入数据库的网站,而数据本身相当敏感。作为预防措施,我希望进行一些加密/解密,虽然我在一些基本测试中取得了成功,但当我尝试从数据库本身提取数据时,它目前无法正常工作。
这是我目前的工作;
$plaintext = 'Hello World';
$encrypted = openssl_encrypt($plaintext, $cipher, $key, 0, $iv);
$decrypted = openssl_decrypt($encrypted, $cipher, $key, 0, $iv);
echo "<pre>" . $encrypted . " - Encrypted Version </pre>";
echo "<pre>" . $decrypted . " - Decrypted Version </pre>";
这在页面本身 (Image) 上工作得很好,正如您在这张图片中看到的那样。当尝试将其输入到数据库中并检索它并解密时,它停止工作。
我可以看到数据库中的数据是加密的,我可以正常回显结果,但是,当我尝试使用 mysqli_fetch_array() 循环并检索数据时,与上面的功能相同,不再工作..
while($row = mysqli_fetch_array($result))
{
$title = openssl_decrypt($row['title'], $cipher, $key, 0, $iv);
echo "<pre>" . $title . " - Decrypted Version (MySQLi) </pre>";
}
请注意,循环的数据库连接正常,因为我可以输出原始数据本身。只是通过openssl_decrypt 不再起作用。
我不知道是什么原因,我查看了有关此问题的大量 Stack Overflow 问题以及许多其他在线资源,但没有一个与我的问题有关。
感谢您抽出宝贵时间阅读,并期待解决此问题。
其他信息:
PHP 版本:7.1.9 MySQL 版本:5.7.14 阿帕奇版本:2.4.23
【问题讨论】:
-
可能是编码问题?请验证您在执行 SELECT 时得到的结果与您之前在表中插入的内容完全相同,如有必要,请使用校验和(例如 MD5)。
-
谢谢@Chris - 对不起,那是我的错误。这没有在数据输入中使用,我已经从输出中删除了它,它仍然无法正常工作。我写的时候只是在测试,忘了省略它。
-
openssl_decrypt函数没有理由无法解密使用openssl_encrypt和相同参数正确加密的内容。我将首先启用errors reporting 并检查错误日志。openssl_decrypt函数在与错误参数一起使用时返回false,因此您可能会得到一个空字符串 (Boolean FALSE is converted to "" (the empty string),并且您应该会看到相应的警告。 -
很难说。该函数返回
false,因为某处存在错误(加密值?另一个参数?...)。我知道我的评论没有帮助,但再次重申,没有看到完整的示例和/或错误日志,显然不可能说,抱歉。 -
能否请您显示在表格中加密并插入标题的代码,以及
SHOW CREATE TABLE <your_table_name_here>的完整输出?
标签: php mysql database security encryption