如何使用php在mysql中存储敏感用户数据

如何使用php在mysql中存储敏感用户数据,php,mysql,encryption,Php,Mysql,Encryption,我想在mysql数据库中存储敏感的用户数据,如名称和地址 我的主要问题是如何搜索包含加密数据的数据库。 如果有人偷了电脑,这是不好的,如果数据存储在纯文本中,那么我想用一个密钥加密它,这个密钥存储在php文件中。 php文件是用ioncube编码的,因此php代码中的密钥是(相当)安全的 另一方面,我还希望能够从web前端查询应用程序的用户名和地址 我的第一个想法是在存储数据之前对数据进行加密,在我的搜索页面中,我必须读取整个用户数据库并对其进行完全解密,这样我就可以使用php搜索结果 但对于大

我想在mysql数据库中存储敏感的用户数据,如名称和地址

我的主要问题是如何搜索包含加密数据的数据库。

如果有人偷了电脑,这是不好的,如果数据存储在纯文本中,那么我想用一个密钥加密它,这个密钥存储在php文件中。 php文件是用ioncube编码的,因此php代码中的密钥是(相当)安全的

另一方面,我还希望能够从web前端查询应用程序的用户名和地址

我的第一个想法是在存储数据之前对数据进行加密,在我的搜索页面中,我必须读取整个用户数据库并对其进行完全解密,这样我就可以使用php搜索结果

但对于大型用户数据库,这将非常占用内存


其他信息:

我已经加密了密码,所以我不需要解决这个问题


我需要一个php和mysql的解决方案,因为我无法更改服务器配置(光盘加密等)。服务器是一个非常不安全的旧ubuntu 9安装,但无法更改,原因我将不在这里解释。

简单,将服务器存储在锁和钥匙(或生物安全)后面

和散列你的密码


选项2使用。

您可以加密数据库行的每个敏感字段,但需要确保密钥的安全。如果您担心整个服务器被盗,那么您不能将解密密钥存储在文件系统上,因为这将与机器一起被盗

您可以使用基于用户密码生成的密钥对每个用户进行加密。由于您(我假设)只存储密钥的散列(使用Bcrypt),攻击者很难检索用户的密码但是,这意味着只有用户可以查看其数据;管理员帐户将无法解密其他用户的敏感数据。对你来说,这很可能是一个交易破坏者


如果用户以外的其他人需要访问数据,则您必须在整个应用程序中全局使用相同的加密密钥。如果配置文件中没有该密钥,您唯一的选择就是尝试将该密钥存储在内存中(这样您就必须在系统可用之前对其进行初始化)。这不足以保证密钥未写入磁盘(如交换文件等),但在冷启动后将更接近于保护数据。

您可以使用MD5或类似工具加密,并使用ID检索。我想您是指敏感用户数据:)@VijaySarin,因为1 MD5不是加密,2 MD5是可破解的。与时俱进。谁需要能够读取用户的数据?只有该用户,或者像管理员帐户这样的其他帐户?@rubo77没有冒犯的意思,但如果你在这样的级别上设置限制,你不能指望任何人会想出神奇的安全系统。如果这些数据非常敏感,那么就换一个系统或更新它。否则,不要储存它,或者如果你感到疼痛,请交叉手指,以免无人通过。对不起,在我的客户机器上不可能这样做。(不同的安装有太多问题)@rubo77那么看起来你被不安全的数据困住了。听起来不错。我的主要问题是如何在包含加密数据的数据库中搜索哪个版本?如果您使用全局密钥并搜索精确匹配,您将加密搜索值并与密码文本匹配。否则,您需要解密您希望检查的每个字段。太好了!谢谢,这就是我一直在寻找的解决方案(不明白为什么这是关闭的,因为它不是建设性的),用用户密码生成的密钥生成每个用户的加密是一个好主意。但是如果用户丢失了密码怎么办呢?另一种说法是:如果你生成了第二个密钥,而服务器被偷走了,那么用用户密码加密数据似乎和用它生成另一个密钥一样有效,如果小偷发现了用户密码,那么很容易生成另一个密钥。