我需要加密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';
我相信第二个会慢得多,所以,我想知道第一个例子是否可行。
答案 0 :(得分:1)
使用
SELECT * FROM `table`
WHERE `Enc_COL` = AES_ENCRYPT('text-to-encrypt', 'same_passphrase');
应该没问题。只需确保Enc_Col
有一个索引,这样您就不必扫描整个表格以获得结果。只要您使用相同的输入和键,您将获得相同的输出。
只是旁注,不要对多个列使用相同的密钥(确保使用某种对您加密的每列唯一的IV或加密nonce)。如果使用相同的密钥加密所有行并且数据库受到损害,则更有可能找到密钥。