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



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

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

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

所以我尝试了以下代码:

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

但这不会返回任何内容。所以我随后发现了这个SO问题,建议添加'0x',将其包装在BIN2HEX()HEX()中,或者在它之前添加一个x(如x'abcd'(。

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

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

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

Laravel的加密是随机的(这对安全性来说是一件好事,但它使得搜索操作不切实际(。

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

最新更新