我有一个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集成,但它应该很容易实现。