2

我需要加密 MySQL 中的列,并且我正在使用 AES_ENCRYPT。我想找出一种在 WHERE 子句中使用此数据列的安全方法。我的问题是这个——

1)我可以使用相同的密码对 WHERE 子句参数进行 AES_ENCRYPT 并在 WHERE 子句中使用生成的加密字符串吗?还是我必须对整个列进行解密?

例如,这会安全吗?

SELECT * from TABLE WHERE Enc_COL= AES_ENCRYPT('someColValue','same_passphrase');

还是必须

SELECT * from TABLE WHERE AES_ENCRYPT(Enc_COL,'same_passphrase')= 'someColValue';

我相信第二个例子会慢得多,所以我想知道第一个例子是否可行。

4

1 回答 1

1

使用

SELECT * FROM `table`
WHERE `Enc_COL` = AES_ENCRYPT('text-to-encrypt', 'same_passphrase');

应该没事。只要确保有一个索引,Enc_Col就不必扫描整个表来查找结果。只要您使用相同的输入和键,您将获得相同的输出。

只是一个侧面说明,不要对多个列使用相同的密钥(确保使用某种 IV 或加密随机数,这对您加密的每一列都是唯一的)。如果您使用相同的密钥加密所有行并且您的数据库受到破坏,则更有可能有人可以找到该密钥。

于 2012-08-07T20:22:37.730 回答