如何使用Laravel Eloquent ORM搜索加密值?

时间:2018-10-26 14:53:48

标签: php mysql laravel encryption binary

我有一个Laravel代码库,该记录在插入Mysql数据库之前已加密。使用Crypto methods of the php-encryption library完成加密。如果我想根据加密值之一查找记录,则遍历所有记录都可以:

$encryptedValue = \App\Crypt::encryptData($value);
$records = TheModel::where('thefield', $encryptedValue)->get();
foreach ($records as $record){
    print $record->id;
}

不幸的是,这不是很可扩展。数据库仍然很小,但是增长很快,因此我需要更改此代码才能实际执行查询。

所以我尝试了以下代码:

'0x'

但这不会返回任何内容。因此,我发现this SO question建议添加BIN2HEX(),将其包装在HEX()x中,或在其之前添加x'abcd'(例如{{1} }。

我尝试添加'0x'(不起作用),但是我不确定如何将其他想法纳入我的代码中。

有人知道我如何用我的代码尝试这些想法吗?

1 个答案:

答案 0 :(得分:2)

您无法使用所使用的工具解决问题。

Laravel的加密方式为randomized(这对安全性而言是件好事,但对于搜索操作而言并不实用)。

签出CipherSweet,它以可与任何数据库驱动程序一起使用的方式实现可搜索的加密。当前没有在任何地方编写Eloquent ORM集成,但是实现起来应该很简单。