我使用php和mysql作为我的web应用程序。我有一个要求,我需要加密用户特定的信息,如姓名和电子邮件地址。
$name = "Kevin John";
$encryptionMethod = "AES-256-CBC";
$secretHash = "25c6c7ff35b8879b151f2136cd13574";
$enc_name = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash);
我正在数据库中存储此加密名称。但真正的问题是我需要根据用户的名字搜索他们example:-
$qry = "select * from users where name like %john%";
有什么建议吗
3条答案
按热度按时间ndh0cuux1#
不建议对要搜索的数据进行加密。
您可以选择不加密要搜索的字段。
或者你可以获取所有的数据,解密和搜索,如果行包含你想要的应用层(我不建议这种方法)。
如果有其他选择,请提出建议。
wpcxdonn2#
在sql中使用aes加密和解密来实现对加密db字段的搜索。syntax:-
aes\u encrypt('text\u to\u encrypt','secret\u key')
aes\u decrypt('text\u to\u decrypt','secret\u key')
首先在sql中使用aes加密将数据加密并存储在db中
INSERT INTO User (fname,email,mobile) VALUES (AES_ENCRYPT('Arun gopan', 'Qwfe345dgfdg'), AES_ENCRYPT('arun123@fa.com', 'Qwfe345dgfdg'),'9658475577');
现在您可以在sql中使用aes decrypt查询db以执行搜索操作。SELECT AES_DECRYPT(fname,'Qwfe345dgfdg'), AES_DECRYPT(email,'Qwfe345dgfdg') FROM User WHERE AES_DECRYPT(fname,'Qwfe345dgfdg') LIKE '%Arun%';
k97glaaz3#
你可能有几种选择,有些简单,有些不简单
搜索/关键字字段通常未加密存储以解决此问题(您显然不希望这样)
如前所述,扫描整个表,解密每个记录都可以,但可能不可行
您可以使用静态iv实现确定性加密,对搜索的项进行加密,并搜索已加密的值。知道static iv正在降低(有时会破坏)安全级别
您可能会看到专门为加密数据上的操作设计的同态加密,但不知道您在做什么,这可能是实现自己的加密非常陡峭和容易出错的路径(即使是经验丰富的专业人员也不建议这样做)。我还不敢穿过这扇门。
您可以存储加密哈希(例如。g。sha256)的索引值(可能沿着加密值)。然后,您可以只搜索散列的搜索项,而不必重新编码原始值