[英]What is the best way to encrypt data without using the resource of mysql server ? Is mcrypt with CFB mode the best way with php?
我有一个包含非加密字段的巨大数据库。
这些数据是敏感的,管理人员决定尽快对它们进行加密。 并且所有新数据都应该以相同的方式自动加密。
第一种方法:
如果我使用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 不能在 MySQL Query 中使用。
第三种方法:
使用 mcrypt_encrypt 和 MCRYPT_RIJNDAEL_128 等价于aes_encrypt
,然后将加密变量插入查询中,而不让 MySQL 做加密部分,这将减少负载和处理时间。
但是mcrypt_encrypt
不再安全,特别是在ECB
模式下。
加密现有 MySQL 数据库(当然还有新数据库)中的几个字段的最佳方法是什么? 如果我将 mcrypt 与模式 CFB 一起使用,之后可以使用 aes_decrypt 来检查数据吗?
加密现有 MySQL 数据库(当然还有新数据库)中的几个字段的最佳方法是什么?
编写一个 PHP 脚本,读取您的数据库并在应用程序层(即在 PHP 中)而不是在数据库层(即不在 SQL 中)进行加密。 一次加密它们,并让您的脚本机会性地加密新字段。
但是现有数据将保持不变,因为 libsodium 不能在 MySQL 查询中使用。
libsodium 对 MySQL 不可用这一事实根本不应该成为阻碍。 毕竟,您不希望您的数据库有机会窃取您的密钥。 MySQL 应该只看到不透明的密文 blob。
您不应该尝试使用 SQL 查询进行加密。 在 SQL 之外执行并用密文替换字段。 然后当你的过程完成时,确保你没有在任何地方缓存纯文本。
如果您试图加密整个数据库,您可能最终希望使用SELECT
查询的WHERE
子句中的某些字段。 欢迎使用可搜索对称加密。 这里有很多疯狂的学术设计(保序加密、同态加密等)。
对于这个用例,我推荐CipherSweet 。 它快速、安全、易于推理,并且不需要安装任何第三方 C 扩展即可从 PHP 使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.