【发布时间】:2014-09-12 22:43:58
【问题描述】:
鉴于 Laravel 的 Crypt 总是添加盐,因此没有两个相同加密的实例是相同的。
通常,这很好,因为我可以比较两者的解密版本。但是,如果我想搜索在数据库中加密的值怎么办?
假设我有一个users 表,我想加密电子邮件地址。现在我想通过电子邮件test@email.com 找人。
我该如何为此编写查询?我不能只是 Crypt::encrypt($email) 和搜索,因为 encrypt 的这个迭代将不同于 DB 中的迭代。
编辑
目前,我唯一能想到的就是获取所有内容并过滤它们:
$match = User::all()->filter(function($record) use($email) {
$field = $record->email['email'];
if(Crypt::decrypt($field) == $email) return $record;
});
但这太糟糕了。我不想搜索所有内容。
【问题讨论】:
-
我认为解决这个问题的唯一方法是使用固定的
key和iv加密您的数据。我不会很难扩展 Crypt 类来做到这一点。 -
您可以考虑添加另一列,其中包含您可以比较的电子邮件哈希。
标签: mysql encryption laravel laravel-4