什么是不使用mysql服务器资源加密数据的最佳方法?使用CFB模式的mcrypt是使用php的最佳方法吗?

问题描述 投票:2回答:1

我有一个具有未加密字段的大型数据库。

这些数据非常敏感,管理人员决定尽快对它们进行加密。并且所有新数据应以相同方式自动加密。

第一种方法

如果使用aes_encrypt创建一个新字段,并像下面这样将加密的数据插入到其中:

INSERT INTO myTable(name_en, name_es, phone)
VALUES(aes_encrypt(name_en, :key), aes_encrypt(name_es, :key), aes_encrypt(phone, :key))

然后,每个插入查询都应使用aes_encrypt(),它将对服务器有很多作用。

第二方法

使用libsodium库,这是对新数据的绝佳解决方案。但是现有数据将与libsodium couldn't be used inside a MySQL Query相同。

第三种方法

[使用带有MCRYPT_RIJNDAEL_128的mcrypt_encrypt等效于aes_encrypt,然后在不让MySQL做加密部分的情况下将加密变量插入查询中,这将减少负载和处理时间。

但是mcrypt_encrypt isn't secure anymore,特别是在ECB模式下。

最好的方法是对现有的MySQL数据库中的几个字段进行加密,当然,对新字段进行加密?而且,如果我在CFB模式下使用了mcrypt,以后可以使用aes_decrypt来检查数据吗?

php mysql encryption mcrypt libsodium
1个回答
0
投票

最好的方法是,对现有的MySQL数据库中的几个字段进行加密,当然,对新字段进行加密?

[编写一个PHP脚本,该脚本可读取您的数据库并在应用程序层(即,在PHP中)而不是数据库层(即,不在SQL中)进行加密。立即将它们全部加密,并让您的脚本适当地加密新字段。

但是现有数据将与无法在MySQL查询中使用libsodium的数据相同。

libsodium不可用于MySQL的事实完全不应该成为障碍。毕竟,您不希望数据库有机会窃取密钥。 MySQL仅应看到不透明的密文blob。

您不应该尝试使用SQL查询进行加密。在SQL外部执行此操作,并用密文替换字段。然后,当您的过程完成时,请确保没有在任何地方缓存纯文本。

注意

如果尝试对整个数据库进行加密,则最终可能要使用WHERE查询的SELECT子句中的某些字段。欢迎使用可搜索对称加密。这里有很多疯狂的学术设计(保留顺序的加密,同态加密等)。

对于此用例,我建议CipherSweet。它快速,安全,易于解释,并且不需要安装任何第三方C扩展来从PHP使用。

© www.soinside.com 2019 - 2024. All rights reserved.