【发布时间】:2019-06-09 05:06:16
【问题描述】:
我有一个包含非加密字段的庞大数据库。
这些数据很敏感,管理人员决定尽快对它们进行加密。并且所有新数据都应该以相同的方式自动加密。
第一种方法:
如果我使用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_encrypt 和 MCRYPT_RIJNDAEL_128 作为 aes_encrypt 的等价物,然后将加密的变量插入到查询中,而不让 MySQL 做加密部分,这将减少负载和处理时间。
但是mcrypt_encryptisn't secure anymore,特别是ECB模式。
最好的方法是加密现有 MySQL 数据库中的几个字段,当然还有新的?如果我在 CFB 模式下使用 mcrypt,之后可以使用 aes_decrypt 来检查数据吗?
【问题讨论】:
标签: php mysql encryption mcrypt libsodium