首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提供数据的Laravel :搜索加密数据

提供数据的Laravel :搜索加密数据
EN

Stack Overflow用户
提问于 2017-12-20 18:21:58
回答 1查看 3K关注 0票数 2

我在使用Laravel的数据时遇到了一个很大的问题。我有一个由setter/getter自动加密(使用Crypt)的模型。

通过这样做,我正在使用datatables来呈现一个表:

代码语言:javascript
复制
    return datatables()->of(Patient::query())
        ->addColumn('name_surname', function($row){
            return $row->name.' '.$row->surname;
        })
        ->make(true);

有三种方法可以将模型传递给datatable:

  1. by query (病人::query())
  2. 按收集(病人::all())
  3. 由DB正面

第三个不解密数据。该查询是超快的,但不允许通过数据收集进行搜索,允许对所有内容进行搜索,但它非常慢。(5-7秒/桌抽签)。我也尝试过缓存它,但它并没有给我带来任何帮助。

我怎么可能搜索加密的数据而不导致性能下降这么低呢?

顺便说一句。这就是我用于setter加密和getter解密的特性

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2017-12-20 21:16:37

更新(2019-06-02):有一个独立的库来实现这个功能,称为CipherSweet。另外,一个Laravel适配器正在进行中

这已经在一篇题为(恰当)的博客文章中得到了回答,使用PHP和SQL构建可搜索的加密数据库。您可以通过问自己以下问题来扩展其内容:

  1. 我加密的数据有多敏感?
    • 如果它受到损害,人们的生命可能会受到严重影响:使用KDF作为盲指数。
    • 不是很好:使用HMAC作为盲索引。

  1. 我们希望在SELECT查询中只需要精确的匹配,还是可以容忍冲突,前提是它们不太多?
    • 永远不要碰撞:使用完整的KDF/HMAC输出。
    • 冲突确定:截断(节省存储),用作Bloom过滤器。

一旦您回答了这些问题,您将确保您的加密提供了密文完整性(例如blind的crypto_secretbox()与每个消息的随机值),并且您将使用HMAC/PBKDF2 2与一起使用不同的密钥来生成明文的盲索引,以便与密文一起存储(即单独的列)。

而不是查询密文,只需重建盲索引,然后解密结果。这给你一个快速,可靠的搜索操作,同时仍然提供语义安全的数据加密。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47912168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档