我在Web应用程序中使用PHP和MySql。我有一个需要加密用户特定信息(例如姓名和email_id)的要求。
$name = "Kevin John";
$encryptionMethod = "AES-256-CBC";
$secretHash = "25c6c7ff35b8879b151f2136cd13574";
$enc_name = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash);
我将此加密名称存储在我的数据库中。但是真正的问题是我需要根据用户名进行搜索,例如:-
$qry = "select * from users where name like %john%";
任何建议表示赞赏
答案 0 :(得分:0)
不建议对要搜索的数据进行加密。
或者您可以获取所有数据,解密并搜索该行是否包含您想要在应用程序层上显示的内容(我不建议这种方法)。
// Pseudocode
$searchTerm = 'john';
$allNamesQuery = 'select * from users';
$allNamesData = execQuery($allNamesQuery);
$suggestions = [];
foreach($allNamesData as $row){
$row = decryptNameFromRow($row);
if(contains($row['name'], $searchTerm))
array_push($suggestions, $row);
}
print_r($suggestions);
请建议是否有其他选择。
答案 1 :(得分:0)
您可能有几种选择,有些简单,有些没有
答案 2 :(得分:0)
在SQL中使用AES加密和解密来实现对加密数据库字段的搜索。语法:-
AES_ENCRYPT('Text_to_encrypt','secret_key')
AES_DECRYPT('Text_to_decrypt','secret_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查询数据库以执行搜索操作。
SELECT AES_DECRYPT(fname,'Qwfe345dgfdg'), AES_DECRYPT(email,'Qwfe345dgfdg')
FROM User
WHERE AES_DECRYPT(fname,'Qwfe345dgfdg') LIKE '%Arun%';