繁体   English   中英

如何加密数据以便使用LIKE执行SQL查询?

[英]How to encrypt data so as to perform SQL queries with LIKE?

请耐心等待,我不是密码学专家。 我的问题可能很基本,但我在Google上搜索了很多,但仍然感到困惑。

在一个PHP项目中,我需要对保存在数据库中的数据进行加密/解密。 在以前的项目中,我使用了es128加密,一切都进行得很好。 但是现在我有不同的需求。 我需要使用运算符LIKE在数据库中执行查询。 显然,整个字符串的加密不包括对一部分字符串的加密。

在谷歌上搜索,我意识到也许我必须使用对称密钥算法(例如凯撒的密码)。 但是我使用php-encryption库( https://github.com/defuse/php-encryption )进行了测试,结果如下:

MAMMA =NŸNq!! 83 = S™÷á;Bª¯óØš‹æ%§0%? _†Ÿ&0c-â€Ü/:LSçï; ҵ嬣§.öÒ9

MAMMAMIA =(ÒÎ{yG:[&¶›J'Õ6÷ííG£V {ÉsÙ=qÝ×。:ÍÔj…Qž¹×j¶óóþ¡ÔnÛŠ*ån\\ hhN

第一个单词的加密不包括在第二个单词的加密中。 显然,模拟算法不适合我的需求。

使用PHP可以达到我的目标吗? 谢谢!

最简单的方法是使用mysql加密/解密功能,然后“即时”执行这两项操作。

要插入和加密数据:

insert into mytable (secret) values AES_ENCRYPT('SomeTextToHide','myPassword');

使用like搜索加密值

select * from mytable where AES_DECRYPT(secret,'myPassword') like '%text%';

能够在安全加密的数据上使用LIKE子句及其通配符的目标是两个相互排斥的需求的集合。

您可以安全地加密数据,也可以将LIKE子句与通配符一起使用。 您不能一次执行全部操作,因为LIKE子句本身会绕过加密!

SELECT * WHERE data LIKE 'a%'
SELECT * WHERE data LIKE 'b%'
...
SELECT * WHERE data LIKE '_a%'
SELECT * WHERE data LIKE '_b%'
...
SELECT * WHERE data LIKE '__a%'
SELECT * WHERE data LIKE '__b%'
...

如果您安全地加密了数据库中的数据,则需要将所有数据都拉回本地,全部解密,然后对解密后的数据进行通配符搜索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM