繁体   English   中英

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

[英]How to search for encrypted value using Laravel Eloquent ORM?

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

$records = TheModel::all();
foreach ($records as $record){
    if ($record->thefield == $value) {  // thefield is decrypted in the Eloquent model definition
        print $record->id;
    }
}

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

所以我尝试了以下代码:

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

但这不会返回任何内容。 因此,我发现了这个问题 ,建议添加'0x' ,将其包装在BIN2HEX()HEX()或在其之前添加一个x (例如x'abcd' )。

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

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

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

Laravel的加密是随机的 (这对安全性而言是件好事,但是对于搜索操作而言,这是不切实际的)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM