我正在尝试在我的Laravel应用程序中实现一个可以按名称过滤用户的搜索模块。为了保护用户,'name'
列行在DB上加密。我面临的问题是下面的查询总是返回0结果。
我在搜索数据库之前加密搜索输入值。
$patients = DB::select( DB::raw("SELECT * FROM patient WHERE name LIKE '%".Crypt::encrypt($searchText)."%';"));
我在这里做错了什么?
答案 0 :(得分:1)
Crypt::encrypt("Text")
每次调用时,上述内容很少生成相同的值,因此您的数据库中不会存储相同的值。
<强>建议强>
除非您真的需要,否则不要加密用户名。如果您必须加密名称,请尝试以下操作。
$patients = DB::select("SELECT * FROM patient WHERE name = '".Crypt::encrypt($searchText)."'");
您的加密值区分大小写,因此请将列排序规则更改为latin1_general_cs
答案 1 :(得分:0)
我在这里做什么错了?
Laravel的加密已正确实施,这意味着每封邮件都是randomized!
随机化对实现可搜索加密提出了挑战:永远不会两次获得相同的密文。幸运的是,有一个workaround for making encryption searchable。
这听起来可能很多,但实际上,CipherSweet实现了所有低级机制,对于大多数PHP开发人员来说应该足够容易使用。 (如果事实并非如此,请在Github上提交错误;我们希望如此!)