我在使用Laravel的数据时遇到了一个很大的问题。我有一个由setter/getter自动加密(使用Crypt)的模型。
通过这样做,我正在使用datatables来呈现一个表:
return datatables()->of(Patient::query())
->addColumn('name_surname', function($row){
return $row->name.' '.$row->surname;
})
->make(true);有三种方法可以将模型传递给datatable:
第三个不解密数据。该查询是超快的,但不允许通过数据收集进行搜索,允许对所有内容进行搜索,但它非常慢。(5-7秒/桌抽签)。我也尝试过缓存它,但它并没有给我带来任何帮助。
我怎么可能搜索加密的数据而不导致性能下降这么低呢?
顺便说一句。这就是我用于setter加密和getter解密的特性
public function getAttribute($key)
{
$value = parent::getAttribute($key);
if (in_array($key, $this->encryptable)) {
$value = Crypt::decrypt($value);
} return $value;
}
public function setAttribute($key, $value)
{
if (in_array($key, $this->encryptable)) {
$value = Crypt::encrypt($value);
}
return parent::setAttribute($key, $value);
}发布于 2017-12-20 21:16:37
更新(2019-06-02):有一个独立的库来实现这个功能,称为CipherSweet。另外,一个Laravel适配器正在进行中。
这已经在一篇题为(恰当)的博客文章中得到了回答,使用PHP和SQL构建可搜索的加密数据库。您可以通过问自己以下问题来扩展其内容:
一旦您回答了这些问题,您将确保您的加密提供了密文完整性(例如blind的crypto_secretbox()与每个消息的随机值),并且您将使用HMAC/PBKDF2 2与一起使用不同的密钥来生成明文的盲索引,以便与密文一起存储(即单独的列)。
而不是查询密文,只需重建盲索引,然后解密结果。这给你一个快速,可靠的搜索操作,同时仍然提供语义安全的数据加密。
https://stackoverflow.com/questions/47912168
复制相似问题