如何使用laravel雄辩的orm搜索加密值?

t3psigkw  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(362)

我有一个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 = \App\Crypt::encryptData($value);
$records = TheModel::where('thefield', $encryptedValue)->get();
foreach ($records as $record){
    print $record->id;
}

但这不会有任何回报。所以我发现这个问题应该加上 '0x' ,把它包起来 BIN2HEX() 或者 HEX() 或添加 x 在它之前(比如 x'd' ).
我试着添加 '0x' (这是行不通的),但我不确定如何将其他想法合并到我的代码中。
有人知道我如何用代码来尝试这些想法吗?

xzlaal3s

xzlaal3s1#

你不能用你正在使用的工具来解决问题。
laravel的加密是随机的(这对安全性来说是件好事,但对于搜索操作来说却不切实际)。
请查看ciphersweet,它以一种可用于任何数据库驱动程序的方式实现了可搜索加密。目前还没有一个雄辩的orm集成在任何地方编写,但它应该是直接实现的。

相关问题