我有一个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'
(这是行不通的),但我不确定如何将其他想法合并到我的代码中。
有人知道我如何用代码来尝试这些想法吗?
1条答案
按热度按时间xzlaal3s1#
你不能用你正在使用的工具来解决问题。
laravel的加密是随机的(这对安全性来说是件好事,但对于搜索操作来说却不切实际)。
请查看ciphersweet,它以一种可用于任何数据库驱动程序的方式实现了可搜索加密。目前还没有一个雄辩的orm集成在任何地方编写,但它应该是直接实现的。