php - 在 MySQL 中加密/解密大文本数据的推荐方法是什么?

标签 php mysql security encryption aes

我有一个在内网运行的客户端/服务器应用程序,我有对数据库的一个表的一个字段中的数据进行加密的需求。该字段目前是 TEXT 数据类型,据我所知,这不利于 MySQL 中的加密。存储在字段中的文本类似于员工绩效评估,其中包含来自主管的叙述性评论。由于系统运行的网络对个人信息的限制,这些数据不能以纯文本形式存储。数据还需要由具有不同“角色”(身份验证级别)的不同用户通过应用程序的客户端进行编辑。

所以...我一直在研究如何加密这些数据,这是目前我所了解的:

  • MySQL 文档解释了 AES 函数,我应该将字段数据类型更改为 BLOB 以容纳加密信息。
  • 必须修复 key (即,不要像我在 SO 上读到的那样使用用户密码等),因为不同的用户需要能够编辑/查看评论。
  • 我认为最好的选择是存储 key 并将其作为变量传递到 php 代码中,类似于我对应用程序的 MySQL 登录信息所做的处理。

在这种情况下使用 AES 函数是否是处理此问题的合适方法,或者是否存在我不知道的问题?由于文本的潜在长度,我确实想知道问题(性能?)。我发现的大多数示例都与加密较小的数据有关:例如姓名、地址、信用卡号等

如有任何建议,我们将不胜感激。提前致谢!

最佳答案

使用 AES,在 CBC 或 CTR 模式下都可以。避免使用 ECB 模式,因为它不安全。使用 PKCS7 填充。

如果要将加密文件存储为文本而不是 BLOB,则在保存到数据库之前将二进制密文转换为 Base64。 Base64 仅使用文本字符。在解密之前,您显然需要将 Base64 转换回二进制。

您的主要问题是 key 处理,因为每个有权访问数据库的人都需要 key ,而您不能将 key 存储在数据库本身中。您可能需要就此听取一些专家建议,因为这很重要。

关于php - 在 MySQL 中加密/解密大文本数据的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7361713/

相关文章:

python - 正则表达式的安全性

php - 使用 PHP 获取 mysql 数据时出现问题

MySql LEFT JOIN 只返回另一个表中的一个 NULL 行

ios - 连接到网站的 iOS 应用程序的安全性

php - 显示所有时间约会和保留

mysql - MyISAM:如何在运行 DELETE 的情况下进行 SELECT 而无需锁定等待?

c# - 如何在 .net 中锁定文件,以便只有我的应用程序可以访问它?

javascript - 侧边栏自定义中的 Woocommerce 产品小部件

php - PHP 何时在长时间运行的脚本中运行垃圾收集?

PHP sftp + fopen 与 ssh2_scp_send 比较