带数据表的Laravel:搜索加密数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带数据表的Laravel:搜索加密数据相关的知识,希望对你有一定的参考价值。
我在使用Laravel的数据表时遇到了一个很大的问题。我有一个模型有3个值由setter / getter自动加密(使用Crypt)。
我通过这样做使用数据表来呈现表:
return datatables()->of(Patient::query())
->addColumn('name_surname', function($row){
return $row->name.' '.$row->surname;
})
->make(true);
有三种方法可以将模型传递给datatable:
- 通过查询(Patient :: query())
- 按集合(患者::所有())
- 通过DB facade
第三个不解密数据。查询是超快的,但不允许搜索数据集合允许一切,但它超慢。 (5-7秒/桌面抽奖)。我也试过缓存它,但它没有给我带来任何帮助我的惊喜
如何在不降低性能的情况下搜索加密数据?
顺便说一句。这就是我用于设置加密和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);
}
答案
这篇文章已在一篇名为(恰当)的博客文章Building Searchable Encrypted Databases with PHP and SQL中得到了回答。您可以通过问自己以下问题来扩展其内容:
- 我加密的数据有多敏感? 如果受到损害,人们的生命可能会受到严重影响:使用KDF作为盲目指数。 不是很好:使用HMAC作为盲目索引。
- 我们是否只想在SELECT查询中使用完全匹配,或者只要它们不是太多就可以容忍冲突? 无冲突:使用完整的KDF / HMAC输出。 碰撞OK:Truncate(存储时保存),用作Bloom过滤器。
一旦你回答了这些问题,你将确保你的加密提供密文完整性(例如libsodium的crypto_secretbox()
,每条消息有一个随机的随机数),你将使用HMAC / PBKDF2和不同的密钥来生成盲目索引明文与密文一起存储(即单独的列)。
而不是查询密文,只需重建盲目索引然后解密结果。这为您提供了快速,可靠的搜索操作,同时仍提供语义安全的数据加密。
以上是关于带数据表的Laravel:搜索加密数据的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段