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

Php 如何对数据进行加密,以便使用LIKE执行SQL查询?,php,sql,algorithm,encryption,encryption-symmetric,Php,Sql,Algorithm,Encryption,Encryption Symmetric,请耐心点,我不是密码专家。我的问题可能很基本,但我在谷歌上搜索了很多,我仍然很困惑 在PHP项目中,我需要加密/解密保存在数据库中的数据。在以前的一个项目中,我使用了aes128加密,一切都进行得很顺利。但现在我有了不同的需求。我需要在数据库中使用类似的运算符执行查询。很明显,一个字符串的一部分的加密不包括在整个字符串的加密中 通过谷歌搜索,我意识到也许我必须使用对称密钥算法(比如凯撒密码)。但是我用php加密库()做了一个测试,结果如下: 妈妈!!83=S™÷á;BªØØèæ%§0%?†Ÿ&0

请耐心点,我不是密码专家。我的问题可能很基本,但我在谷歌上搜索了很多,我仍然很困惑

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

通过谷歌搜索,我意识到也许我必须使用对称密钥算法(比如凯撒密码)。但是我用php加密库()做了一个测试,结果如下:

妈妈!!83=S™÷á;BªØØèæ%§0%?†Ÿ&0c-ÐÜÉ/:lç;Õå§.ö210; 9

MAMMAMIA=(ÒÎyG:[&›JÕ6÷G.VɢsÙ=qÝ×:ÍJ…qžþ×Jþ

第一个字的加密不包括在第二个字的加密中。显然,simmetric算法不适合我的需要


使用PHP我可以使用什么来达到我的目标?谢谢!

最简单的方法是使用mysql加密/解密功能,并“动态”完成这两项工作

要插入和加密数据,请执行以下操作:

insert into mytable (secret) values AES_ENCRYPT('SomeTextToHide','myPassword');
使用
等搜索加密值

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%'
...

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

Caesar cipher(或任何其他每字母密码)应该可以正常工作。不推荐使用一些老式的算法,如Cesar cipher。它根本不安全。谢谢。我意识到这些算法不安全。有没有办法实现我的安全目标(以及使用PHP)?好的,但是,出于一些原因,我必须通过phpIf进行加密。如果您只使用php进行加密,那么如果您应用任何安全的加密算法,您在逻辑上无法使用like查询数据库表。想想看……您是对的,但我无法更改它,这就是为什么我想到替换密码……替换密码可以是安全的(取决于用例)例如ECB模式下的AES。但在任何情况下,都需要一个替换密码,其中一个短语被编码为相同的字符串。这种类型的算法(如ceasar密码)在安全性方面是一场彻底的灾难。通过谷歌搜索,我发现答案中建议的方法“从安全角度来看是有缺陷的,因为您的数据和加密密钥可能通过套接字流向DB服务器。这也允许人们只记录查询并捕获对AES_*函数的任何调用”。这是否正确?