我有一个 Laravel 代码库,其中的记录在插入 Mysql 数据库之前会被加密。加密是使用 Crypto methods of the php-encryption library 完成的。如果我想根据其中一个加密值查找记录,则可以循环遍历所有记录:
$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;
}
但这不会返回任何内容。所以我然后找到了this SO question建议添加'0x'
,将其包裹在BIN2HEX()
或HEX()
中或添加x
> 之前(如 x'abcd'
)。
我尝试添加 '0x'
(这不起作用),但我不确定如何将其他想法合并到我的代码中。
有人知道我如何用我的代码尝试这些想法吗?
最佳答案
您无法使用您正在使用的工具解决问题。
Laravel 的加密是 randomized (这对于安全性来说是一件好事,但对于搜索操作来说是不切实际的)。
查看CipherSweet ,它以可与任何数据库驱动程序一起使用的方式实现可搜索加密。目前还没有任何地方编写 Eloquent ORM 集成,但它应该很容易实现。
关于php - 如何使用 Laravel Eloquent ORM 搜索加密值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53011356/