AES_ENCRYPT返回的字符串是唯一的吗?

时间:2012-08-07 19:52:57

标签: mysql security encryption aes

我需要加密MySQL中的一列,而我正在使用AES_ENCRYPT。我想弄清楚在WHERE子句中使用此数据列的安全方法。我的问题是这个 -

1)我可以使用相同的密码短语AES_ENCRYPT WHERE子句参数并使用WHERE子句中生成的加密字符串吗?或者我必须在整个列上运行解密?

例如,这会安全吗?

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

还是必须

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

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

1 个答案:

答案 0 :(得分:1)

使用

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

应该没问题。只需确保Enc_Col有一个索引,这样您就不必扫描整个表格以获得结果。只要您使用相同的输入和键,您将获得相同的输出。

只是旁注,不要对多个列使用相同的密钥(确保使用某种对您加密的每列唯一的IV或加密nonce)。如果使用相同的密钥加密所有行并且数据库受到损害,则更有可能找到密钥。